diff --git a/.DS_Store b/.DS_Store
index e5d152d5..743eea3a 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 8ca37378..e171eea7 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -28,7 +28,7 @@ jobs:
       - attach_workspace:
           at: .
       - run: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
-      - run: npm publish --tag=sff
+      - run: npm publish --tag=ssf
 
 workflows:
   version: 2
diff --git a/.gitignore b/.gitignore
index b384ed9e..27fb5f91 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,7 @@
 __coverage__
 .build-info
 .sass-cache
-#dist
+dist
 node_modules
 _auto_doc_
 .vscode
diff --git a/dist/dev/index.js b/dist/dev/index.js
index 00c452b8..350b11d1 100644
--- a/dist/dev/index.js
+++ b/dist/dev/index.js
@@ -412,7 +412,7 @@ eval("var Keys = __webpack_require__(/*! object-keys */ \"./node_modules/object-
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _api = __webpack_require__(/*! ../services/api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.auth\"\n       * @desc Actions related to Topcoder authentication system.\n       */\n\n/**\n * @static\n * @desc Creates an action that loads Topcoder user profile from v3 API.\n * @param {String} userTokenV3 v3 authentication token.\n * @return {Action}\n */\nfunction loadProfileDone(userTokenV3) {\n  if (!userTokenV3) return _promise2.default.resolve(null);\n  var user = (0, _tcAccounts.decodeToken)(userTokenV3);\n  var api = (0, _api.getApi)('V3', userTokenV3);\n  return _promise2.default.all([api.get('/members/' + user.handle).then(function (res) {\n    return res.json();\n  }).then(function (res) {\n    return res.result.status === 200 ? res.result.content : {};\n  }), api.get('/groups?memberId=' + user.userId + '&membershipType=user').then(function (res) {\n    return res.json();\n  }).then(function (res) {\n    return res.result.status === 200 ? res.result.content : [];\n  })]).then(function (_ref) {\n    var _ref2 = (0, _slicedToArray3.default)(_ref, 2),\n        profile = _ref2[0],\n        groups = _ref2[1];\n\n    return (0, _extends3.default)({}, profile, { groups: groups });\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that sets Topcoder v2 authentication token.\n * @param {String} tokenV2 Topcoder v2 authentication token.\n * @return {Action}\n */\nfunction setTcTokenV2(tokenV2) {\n  return tokenV2;\n}\n\n/**\n * @static\n * @desc Creates an action that decodes Topcoder v3 authentication token,\n * to get user object, and then writes both the token and the user object into\n * Redux store.\n * @param {String} tokenV3 Topcoder v3 authentication token.\n * @return {Action}\n */\nfunction setTcTokenV3(tokenV3) {\n  return tokenV3;\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  AUTH: {\n    LOAD_PROFILE: loadProfileDone,\n    SET_TC_TOKEN_V2: setTcTokenV2,\n    SET_TC_TOKEN_V3: setTcTokenV3\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(loadProfileDone, 'loadProfileDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/auth.js');\n  reactHotLoader.register(setTcTokenV2, 'setTcTokenV2', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/auth.js');\n  reactHotLoader.register(setTcTokenV3, 'setTcTokenV3', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/auth.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/auth.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/auth.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _api = __webpack_require__(/*! ../services/api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.auth\"\n       * @desc Actions related to Topcoder authentication system.\n       */\n\n/**\n * @static\n * @desc Creates an action that loads Topcoder user profile from v3 API.\n * @param {String} userTokenV3 v3 authentication token.\n * @return {Action}\n */\nfunction loadProfileDone(userTokenV3) {\n  if (!userTokenV3) return _promise2.default.resolve(null);\n  var user = (0, _tcAccounts.decodeToken)(userTokenV3);\n  var api = (0, _api.getApi)('V3', userTokenV3);\n  return _promise2.default.all([api.get('/members/' + user.handle).then(function (res) {\n    return res.json();\n  }).then(function (res) {\n    return res.result.status === 200 ? res.result.content : {};\n  }), api.get('/groups?memberId=' + user.userId + '&membershipType=user').then(function (res) {\n    return res.json();\n  }).then(function (res) {\n    return res.result.status === 200 ? res.result.content : [];\n  })]).then(function (_ref) {\n    var _ref2 = (0, _slicedToArray3.default)(_ref, 2),\n        profile = _ref2[0],\n        groups = _ref2[1];\n\n    return (0, _extends3.default)({}, profile, { groups: groups });\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that sets Topcoder v2 authentication token.\n * @param {String} tokenV2 Topcoder v2 authentication token.\n * @return {Action}\n */\nfunction setTcTokenV2(tokenV2) {\n  return tokenV2;\n}\n\n/**\n * @static\n * @desc Creates an action that decodes Topcoder v3 authentication token,\n * to get user object, and then writes both the token and the user object into\n * Redux store.\n * @param {String} tokenV3 Topcoder v3 authentication token.\n * @return {Action}\n */\nfunction setTcTokenV3(tokenV3) {\n  return tokenV3;\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  AUTH: {\n    LOAD_PROFILE: loadProfileDone,\n    SET_TC_TOKEN_V2: setTcTokenV2,\n    SET_TC_TOKEN_V3: setTcTokenV3\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(loadProfileDone, 'loadProfileDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/auth.js');\n  reactHotLoader.register(setTcTokenV2, 'setTcTokenV2', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/auth.js');\n  reactHotLoader.register(setTcTokenV3, 'setTcTokenV3', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/auth.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/auth.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/auth.js?");
 
 /***/ }),
 
@@ -424,7 +424,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\n__webpack_require__(/*! isomorphic-fetch */ \"isomorphic-fetch\");\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _services = __webpack_require__(/*! ../services */ \"./src/services/index.js\");\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./src/utils/index.js\");\n\nvar _filter = __webpack_require__(/*! ../utils/challenge/filter */ \"./src/utils/challenge/filter.js\");\n\nvar filterUtil = _interopRequireWildcard(_filter);\n\nvar _config = __webpack_require__(/*! ../config */ \"./src/config/index.js\");\n\nvar config = _interopRequireWildcard(_config);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Challenge listing actions.\n       */\n\nvar fireErrorMessage = _utils.errors.fireErrorMessage;\nvar getService = _services.services.challenge.getService;\nvar getReviewOpportunitiesService = _services.services.reviewOpportunities.getReviewOpportunitiesService;\nvar PAGE_SIZE = config.PAGE_SIZE,\n    REVIEW_OPPORTUNITY_PAGE_SIZE = config.REVIEW_OPPORTUNITY_PAGE_SIZE;\n\n/**\n * Process filter\n * When filter includes Data Science track, still should be\n * included DEVELOP_MARATHON_MATCH sub track.\n * @param filter\n * @returns {string}\n */\n\nfunction processFilter(filter) {\n  var newFilter = _lodash2.default.clone(filter);\n  if (_lodash2.default.has(filter, 'track') && filter.track.includes(_tc.COMPETITION_TRACKS.DATA_SCIENCE.toUpperCase()) && (_lodash2.default.has(filter, 'subTrack') && !filter.subTrack.includes('DEVELOP_MARATHON_MATCH') || !_lodash2.default.has(filter, 'subTrack'))) {\n    newFilter.subTrack = '' + (_lodash2.default.has(filter, 'subTrack') ? newFilter.subTrack + ',DEVELOP_MARATHON_MATCH' : 'DEVELOP_MARATHON_MATCH');\n    newFilter.track = _lodash2.default.remove(filter.track.split(','), function (item) {\n      return item.toUpperCase() !== _tc.COMPETITION_TRACKS.DATA_SCIENCE.toUpperCase();\n    }).join(',');\n\n    if (_lodash2.default.isEmpty(newFilter.track)) {\n      delete newFilter.track;\n    }\n  }\n  return newFilter;\n}\n\n/**\n * Private. Loads from the backend all challenges matching some conditions.\n * @param {Function} getter Given params object of shape { limit, offset }\n *  loads from the backend at most \"limit\" challenges, skipping the first\n *  \"offset\" ones. Returns loaded challenges as an array.\n * @param {Number} page Optional. Next page of challenges to load.\n * @param {Array} prev Optional. Challenges loaded so far.\n */\nfunction getAll(getter) {\n  var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var prev = arguments[2];\n\n  /* Amount of challenges to fetch in one API call. 50 is the current maximum\n   * amount of challenges the backend returns, event when the larger limit is\n   * explicitely required. */\n  return getter({\n    limit: PAGE_SIZE,\n    offset: page * PAGE_SIZE\n  }).then(function (res) {\n    if (res.challenges.length === 0) {\n      return prev || res;\n    }\n    // parse challenges and meta\n    var current = {};\n    if (prev) {\n      current.challenges = prev.challenges.concat(res.challenges);\n      current.meta = res.meta;\n    } else {\n      current = res;\n    }\n    return getAll(getter, 1 + page, current);\n  });\n}\n\n/**\n * Gets possible challenge subtracks.\n * @return {Promise}\n */\nfunction getChallengeSubtracksDone() {\n  return getService().getChallengeSubtracks().then(function (res) {\n    return res.sort(function (a, b) {\n      return a.name.localeCompare(b.name);\n    });\n  });\n}\n\n/**\n * Gets possible challenge tags (technologies).\n * @return {Promise}\n */\nfunction getChallengeTagsDone() {\n  return getService().getChallengeTags().then(function (res) {\n    return res.map(function (item) {\n      return item.name;\n    }).sort(function (a, b) {\n      return a.localeCompare(b);\n    });\n  });\n}\n\n/**\n * Notifies about reloading of all active challenges. The UUID is stored in the\n * state, and only challenges fetched by getAllActiveChallengesDone action with\n * the same UUID will be accepted into the state.\n * @param {String} uuid\n * @param {String} page\n * @param {Object} frontFilter\n * @param {String} sort\n * @param {String} bucket\n * @return {String}\n */\nfunction getActiveChallengesInit(uuid, page, frontFilter, sort, bucket) {\n  return {\n    uuid: uuid, page: page, frontFilter: frontFilter, sort: sort, bucket: bucket\n  };\n}\n\n/** TODO: Inspect if the 2 actions bellow can be removed?\n * They do  duplicate what is done in `getActiveChallengesDone` but fetch all challenges\n * which was refactored in listing-improve\n */\nfunction getAllActiveChallengesInit(uuid) {\n  return uuid;\n}\nfunction getAllActiveChallengesDone(uuid, tokenV3) {\n  var filter = { status: 'ACTIVE' };\n  var service = getService(tokenV3);\n  var calls = [getAll(function (params) {\n    return service.getChallenges(filter, params);\n  })];\n  var user = void 0;\n  if (tokenV3) {\n    user = (0, _tcAccounts.decodeToken)(tokenV3).handle;\n    // Handle any errors on this endpoint so that the non-user specific challenges\n    // will still be loaded.\n    calls.push(getAll(function (params) {\n      return service.getUserChallenges(user, filter, params).catch(function () {\n        return { challenges: [] };\n      });\n    }));\n  }\n  return _promise2.default.all(calls).then(function (_ref) {\n    var _ref2 = (0, _slicedToArray3.default)(_ref, 2),\n        ch = _ref2[0],\n        uch = _ref2[1];\n\n    /* uch array contains challenges where the user is participating in\n    @@ -111,8 +124,8 @@ function getAllActiveChallengesDone(uuid, tokenV3) {\n     * challenges in an efficient way. */\n    if (uch) {\n      var map = {};\n      uch.challenges.forEach(function (item) {\n        map[item.id] = item;\n      });\n      ch.challenges.forEach(function (item) {\n        if (map[item.id]) {\n          /* It is fine to reassing, as the array we modifying is created just\n           * above within the same function. */\n          /* eslint-disable no-param-reassign */\n          item.users[user] = true;\n          item.userDetails = map[item.id].userDetails;\n          /* eslint-enable no-param-reassign */\n        }\n      });\n    }\n\n    return {\n      uuid: uuid,\n      challenges: ch.challenges,\n      handle: user\n    };\n  });\n}\n\n/**\n * Gets 1 page of active challenges (including marathon matches) from the backend.\n * Once this action is completed any active challenges saved to the state before\n * will be dropped, and the newly fetched ones will be stored there.\n * Loading of all challenges wil start in background.\n * @param {String} uuid\n * @param {Number} page\n * @param {Object} backendFilter Backend filter to use.\n * @param {String} tokenV3 Optional. Topcoder auth token v3. Without token only\n *  public challenges will be fetched. With the token provided, the action will\n *  also fetch private challenges related to this user.\n * @param {Object} frontFilter\n * @param {String} sort\n * @param {String} bucket\n\n * @return {Promise}\n */\nfunction getActiveChallengesDone(uuid, page, backendFilter, tokenV3) {\n  var frontFilter = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n  var sort = arguments[5];\n  var bucket = arguments[6];\n\n  var filter = processFilter((0, _extends3.default)({}, backendFilter, {\n    status: 'ACTIVE'\n  }));\n\n  var service = getService(tokenV3);\n  var calls = [service.getChallenges(filter, {\n    limit: PAGE_SIZE,\n    offset: page * PAGE_SIZE\n  })];\n  var user = void 0;\n  if (tokenV3) {\n    user = (0, _tcAccounts.decodeToken)(tokenV3).handle;\n    // Handle any errors on this endpoint so that the non-user specific challenges\n    // will still be loaded.\n    calls.push(getAll(function (params) {\n      return service.getUserChallenges(user, filter, params).catch(function () {\n        return { challenges: [] };\n      });\n    }));\n  }\n  return _promise2.default.all(calls).then(function (_ref3) {\n    var _ref4 = (0, _slicedToArray3.default)(_ref3, 2),\n        ch = _ref4[0],\n        uch = _ref4[1];\n\n    // let fullCH = ch;\n    /* uch array contains challenges where the user is participating in\n     * some role. The same challenge are already listed in res array, but they\n     * are not attributed to the user there. This block of code marks user\n     * challenges in an efficient way. */\n    if (uch) {\n      var map = {};\n      uch.challenges.forEach(function (item) {\n        map[item.id] = item;\n      });\n      ch.challenges.forEach(function (item) {\n        if (map[item.id]) {\n          /* It is fine to reassing, as the array we modifying is created just\n           * above within the same function. */\n          /* eslint-disable no-param-reassign */\n          item.users[user] = true;\n          item.userDetails = map[item.id].userDetails;\n          /* eslint-enable no-param-reassign */\n        }\n      });\n    }\n\n    var challenges = ch.challenges,\n        meta = ch.meta;\n    // filter by date range and re-compute meta\n    // we can safely remove the next two lines when backend support date range\n\n    challenges = filterUtil.filterByDate(challenges, frontFilter);\n    meta = filterUtil.newMeta(meta, challenges, frontFilter);\n    return {\n      uuid: uuid,\n      handle: tokenV3 ? user : null,\n      challenges: challenges,\n      meta: meta,\n      frontFilter: frontFilter,\n      sort: sort,\n      bucket: bucket,\n      tokenV3: tokenV3\n    };\n  });\n}\n\n/**\n * Init loading of all challenges\n * @param {String} uuid\n */\nfunction getRestActiveChallengesInit(uuid) {\n  return { uuid: uuid };\n}\n\n/**\n * Loading all challenges\n * @param {String} uuid\n * @param {String} tokenV3\n * @param {Object} backendFilter\n * @param {Object} frontFilter\n * @param {String} sort\n * @param {String} bucket\n */\nfunction getRestActiveChallengesDone(uuid, tokenV3, backendFilter, frontFilter, sort, bucket) {\n  var filter = processFilter((0, _extends3.default)({}, backendFilter, {\n    status: 'ACTIVE'\n  }));\n\n  var service = getService(tokenV3);\n  var calls = [getAll(function (params) {\n    return service.getChallenges(filter, params);\n  }, 1)];\n  var user = void 0;\n  if (tokenV3) {\n    user = (0, _tcAccounts.decodeToken)(tokenV3).handle;\n    calls.push(getAll(function (params) {\n      return service.getUserChallenges(user, filter, params).catch(function () {\n        return { challenges: [] };\n      });\n    }), 1);\n  }\n  return _promise2.default.all(calls).then(function (_ref5) {\n    var _ref6 = (0, _slicedToArray3.default)(_ref5, 2),\n        ch = _ref6[0],\n        uch = _ref6[1];\n\n    /* uch array contains challenges where the user is participating in\n     * some role. The same challenge are already listed in res array, but they\n     * are not attributed to the user there. This block of code marks user\n     * challenges in an efficient way. */\n    if (uch) {\n      var map = {};\n      uch.challenges.forEach(function (item) {\n        map[item.id] = item;\n      });\n      ch.challenges.forEach(function (item) {\n        if (map[item.id]) {\n          /* It is fine to reassing, as the array we modifying is created just\n           * above within the same function. */\n          /* eslint-disable no-param-reassign */\n          item.users[user] = true;\n          item.userDetails = map[item.id].userDetails;\n          /* eslint-enable no-param-reassign */\n        }\n      });\n    }\n\n    var challenges = ch.challenges;\n    // filter by date range and re-compute meta\n    // we can safely remove the next two lines when backend support date range\n\n    challenges = filterUtil.filterByDate(challenges, frontFilter);\n    var meta = filterUtil.newMeta(undefined, challenges, frontFilter);\n\n    return {\n      uuid: uuid,\n      handle: tokenV3 ? user : null,\n      challenges: challenges,\n      frontFilter: frontFilter,\n      meta: meta,\n      sort: sort,\n      bucket: bucket\n    };\n  });\n}\n\n/**\n * Notifies the state that we are about to load the specified page of past\n * challenges.\n * @param {String} uuid\n * @param {Number} page\n * @param {Object} frontFilter\n * @param {String} sort\n * @return {Object}\n */\nfunction getPastChallengesInit(uuid, page, frontFilter, sort) {\n  return {\n    uuid: uuid,\n    page: page,\n    frontFilter: frontFilter,\n    sort: sort\n  };\n}\n\n/**\n * Gets the specified page of past challenges (including MMs).\n * @param {String} uuid\n * @param {Number} page Page of challenges to fetch.\n * @param {Object} filter Backend filter to use.\n * @param {String} tokenV3 Optional. Topcoder auth token v3.\n * @param {Object} frontFilter Optional. Original frontend filter.\n * @param {String} sort\n * @return {Object}\n */\nfunction getPastChallengesDone(uuid, page, filter, tokenV3) {\n  var frontFilter = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n  var sort = arguments[5];\n\n  var service = getService(tokenV3);\n  var newFilter = processFilter((0, _extends3.default)({}, filter, {\n    status: 'COMPLETED'\n  }));\n  return service.getChallenges(newFilter, {\n    limit: PAGE_SIZE,\n    offset: page * PAGE_SIZE\n  }).then(function (_ref7) {\n    var challenges = _ref7.challenges;\n    return {\n      uuid: uuid,\n      challenges: challenges,\n      frontFilter: frontFilter,\n      sort: sort\n    };\n  });\n}\n\n/**\n * Action to get a list of currently open Review Opportunities using V3 API\n * @param {String} uuid Unique identifier for init/donen instance from shortid module\n * @param {Number} page Page of review opportunities to fetch.\n * @param {String} tokenV3 Optional.\n * @param {String} sort Optional.\n * @param {Object} frontFilter Optional.\n * @return {Object} Action object\n */\nfunction getReviewOpportunitiesDone(uuid, page, tokenV3, sort) {\n  var frontFilter = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n  return getReviewOpportunitiesService(tokenV3).getReviewOpportunities(REVIEW_OPPORTUNITY_PAGE_SIZE, page * REVIEW_OPPORTUNITY_PAGE_SIZE).then(function (loaded) {\n    return {\n      uuid: uuid, loaded: loaded, sort: sort, frontFilter: frontFilter\n    };\n  }).catch(function (error) {\n    fireErrorMessage('Error Getting Review Opportunities', error.content || error);\n    return _promise2.default.reject(error);\n  });\n}\n\n/**\n * Payload creator for the action that inits the loading of SRMs.\n * @param {String} uuid\n * @return {String}\n */\nfunction getSrmsInit(uuid) {\n  return uuid;\n}\n\n/**\n * Payload creator for the action that loads SRMs.\n * @param {String} uuid\n * @param {String} handle\n * @param {Object} params\n * @param {String} tokenV3\n */\nfunction getSrmsDone(uuid, handle, params, tokenV3) {\n  var service = getService(tokenV3);\n  var promises = [service.getSrms(params)];\n  if (handle) {\n    promises.push(service.getUserSrms(handle, params));\n  }\n  return _promise2.default.all(promises).then(function (data) {\n    var srms = data[0];\n    var userSrms = data[1];\n    var userSrmsMap = {};\n    _lodash2.default.forEach(userSrms, function (srm) {\n      userSrmsMap[srm.id] = srm;\n    });\n    srms = _lodash2.default.map(srms, function (srm) {\n      if (userSrmsMap[srm.id]) {\n        return (0, _tc.processSRM)(srm);\n      }\n      return srm;\n    });\n    return { uuid: uuid, data: srms };\n  });\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  CHALLENGE_LISTING: {\n    DROP_CHALLENGES: function DROP_CHALLENGES(bucket) {\n      return { bucket: bucket };\n    },\n\n    GET_MORE_CHALLENGES: function GET_MORE_CHALLENGES(bucket) {\n      return { bucket: bucket };\n    },\n\n    GET_ALL_ACTIVE_CHALLENGES_INIT: getAllActiveChallengesInit,\n    GET_ALL_ACTIVE_CHALLENGES_DONE: getAllActiveChallengesDone,\n\n    GET_ACTIVE_CHALLENGES_INIT: getActiveChallengesInit,\n    GET_ACTIVE_CHALLENGES_DONE: getActiveChallengesDone,\n\n    GET_REST_ACTIVE_CHALLENGES_INIT: getRestActiveChallengesInit,\n    GET_REST_ACTIVE_CHALLENGES_DONE: getRestActiveChallengesDone,\n\n    GET_CHALLENGE_SUBTRACKS_INIT: _lodash2.default.noop,\n    GET_CHALLENGE_SUBTRACKS_DONE: getChallengeSubtracksDone,\n\n    GET_CHALLENGE_TAGS_INIT: _lodash2.default.noop,\n    GET_CHALLENGE_TAGS_DONE: getChallengeTagsDone,\n\n    GET_PAST_CHALLENGES_INIT: getPastChallengesInit,\n    GET_PAST_CHALLENGES_DONE: getPastChallengesDone,\n\n    GET_REVIEW_OPPORTUNITIES_INIT: function GET_REVIEW_OPPORTUNITIES_INIT(uuid, page, sort) {\n      return { uuid: uuid, page: page, sort: sort };\n    },\n    GET_REVIEW_OPPORTUNITIES_DONE: getReviewOpportunitiesDone,\n\n    GET_SRMS_INIT: getSrmsInit,\n    GET_SRMS_DONE: getSrmsDone,\n\n    EXPAND_TAG: function EXPAND_TAG(id) {\n      return id;\n    },\n\n    /* Pass in community ID. */\n    SELECT_COMMUNITY: _lodash2.default.identity,\n\n    SET_FILTER: _lodash2.default.identity,\n\n    SET_DATEPICKER_STATUS: function SET_DATEPICKER_STATUS(status) {\n      return { status: status };\n    },\n\n    SET_SORT: function SET_SORT(bucket, sort) {\n      return { bucket: bucket, sort: sort };\n    }\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(fireErrorMessage, 'fireErrorMessage', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getReviewOpportunitiesService, 'getReviewOpportunitiesService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(PAGE_SIZE, 'PAGE_SIZE', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(REVIEW_OPPORTUNITY_PAGE_SIZE, 'REVIEW_OPPORTUNITY_PAGE_SIZE', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(processFilter, 'processFilter', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getAll, 'getAll', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getChallengeSubtracksDone, 'getChallengeSubtracksDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getChallengeTagsDone, 'getChallengeTagsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getActiveChallengesInit, 'getActiveChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getAllActiveChallengesInit, 'getAllActiveChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getAllActiveChallengesDone, 'getAllActiveChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getActiveChallengesDone, 'getActiveChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getRestActiveChallengesInit, 'getRestActiveChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getRestActiveChallengesDone, 'getRestActiveChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getPastChallengesInit, 'getPastChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getPastChallengesDone, 'getPastChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getReviewOpportunitiesDone, 'getReviewOpportunitiesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getSrmsInit, 'getSrmsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getSrmsDone, 'getSrmsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge-listing.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/challenge-listing.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\n__webpack_require__(/*! isomorphic-fetch */ \"isomorphic-fetch\");\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _services = __webpack_require__(/*! ../services */ \"./src/services/index.js\");\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./src/utils/index.js\");\n\nvar _filter = __webpack_require__(/*! ../utils/challenge/filter */ \"./src/utils/challenge/filter.js\");\n\nvar filterUtil = _interopRequireWildcard(_filter);\n\nvar _config = __webpack_require__(/*! ../config */ \"./src/config/index.js\");\n\nvar config = _interopRequireWildcard(_config);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Challenge listing actions.\n       */\n\nvar fireErrorMessage = _utils.errors.fireErrorMessage;\nvar getService = _services.services.challenge.getService;\nvar getReviewOpportunitiesService = _services.services.reviewOpportunities.getReviewOpportunitiesService;\nvar PAGE_SIZE = config.PAGE_SIZE,\n    REVIEW_OPPORTUNITY_PAGE_SIZE = config.REVIEW_OPPORTUNITY_PAGE_SIZE;\n\n/**\n * Process filter\n * When filter includes Data Science track, still should be\n * included DEVELOP_MARATHON_MATCH sub track.\n * @param filter\n * @returns {string}\n */\n\nfunction processFilter(filter) {\n  var newFilter = _lodash2.default.clone(filter);\n  if (_lodash2.default.has(filter, 'track') && filter.track.includes(_tc.COMPETITION_TRACKS.DATA_SCIENCE.toUpperCase()) && (_lodash2.default.has(filter, 'subTrack') && !filter.subTrack.includes('DEVELOP_MARATHON_MATCH') || !_lodash2.default.has(filter, 'subTrack'))) {\n    newFilter.subTrack = '' + (_lodash2.default.has(filter, 'subTrack') ? newFilter.subTrack + ',DEVELOP_MARATHON_MATCH' : 'DEVELOP_MARATHON_MATCH');\n    newFilter.track = _lodash2.default.remove(filter.track.split(','), function (item) {\n      return item.toUpperCase() !== _tc.COMPETITION_TRACKS.DATA_SCIENCE.toUpperCase();\n    }).join(',');\n\n    if (_lodash2.default.isEmpty(newFilter.track)) {\n      delete newFilter.track;\n    }\n  }\n  return newFilter;\n}\n\n/**\n * Private. Loads from the backend all challenges matching some conditions.\n * @param {Function} getter Given params object of shape { limit, offset }\n *  loads from the backend at most \"limit\" challenges, skipping the first\n *  \"offset\" ones. Returns loaded challenges as an array.\n * @param {Number} page Optional. Next page of challenges to load.\n * @param {Array} prev Optional. Challenges loaded so far.\n */\nfunction getAll(getter) {\n  var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  var prev = arguments[2];\n\n  /* Amount of challenges to fetch in one API call. 50 is the current maximum\n   * amount of challenges the backend returns, event when the larger limit is\n   * explicitely required. */\n  return getter({\n    limit: PAGE_SIZE,\n    offset: page * PAGE_SIZE\n  }).then(function (res) {\n    if (res.challenges.length === 0) {\n      return prev || res;\n    }\n    // parse challenges and meta\n    var current = {};\n    if (prev) {\n      current.challenges = prev.challenges.concat(res.challenges);\n      current.meta = res.meta;\n    } else {\n      current = res;\n    }\n    return page === 0 ? current : getAll(getter, 1 + page, current);\n  });\n}\n\n/**\n * Gets possible challenge subtracks.\n * @return {Promise}\n */\nfunction getChallengeSubtracksDone() {\n  return getService().getChallengeSubtracks().then(function (res) {\n    return res.sort(function (a, b) {\n      return a.name.localeCompare(b.name);\n    });\n  });\n}\n\n/**\n * Gets possible challenge tags (technologies).\n * @return {Promise}\n */\nfunction getChallengeTagsDone() {\n  return getService().getChallengeTags().then(function (res) {\n    return res.map(function (item) {\n      return item.name;\n    }).sort(function (a, b) {\n      return a.localeCompare(b);\n    });\n  });\n}\n\n/**\n * Notifies about reloading of all active challenges. The UUID is stored in the\n * state, and only challenges fetched by getAllActiveChallengesDone action with\n * the same UUID will be accepted into the state.\n * @param {String} uuid\n * @param {String} page\n * @param {Object} frontFilter\n * @param {String} sort\n * @param {String} bucket\n * @return {String}\n */\nfunction getActiveChallengesInit(uuid, page, frontFilter, sort, bucket) {\n  return {\n    uuid: uuid, page: page, frontFilter: frontFilter, sort: sort, bucket: bucket\n  };\n}\n\n/** TODO: Inspect if the 2 actions bellow can be removed?\n * They do  duplicate what is done in `getActiveChallengesDone` but fetch all challenges\n * which was refactored in listing-improve\n */\nfunction getAllActiveChallengesInit(uuid) {\n  return uuid;\n}\nfunction getAllActiveChallengesDone(uuid, tokenV3) {\n  var filter = { status: 'ACTIVE' };\n  var service = getService(tokenV3);\n  var calls = [getAll(function (params) {\n    return service.getChallenges(filter, params);\n  })];\n  var user = void 0;\n  if (tokenV3) {\n    user = (0, _tcAccounts.decodeToken)(tokenV3).handle;\n\n    var _decodeToken = (0, _tcAccounts.decodeToken)(tokenV3),\n        userId = _decodeToken.userId;\n    // Handle any errors on this endpoint so that the non-user specific challenges\n    // will still be loaded.\n\n\n    calls.push(getAll(function (params) {\n      return service.getUserChallenges(userId, user, filter, params).catch(function () {\n        return { challenges: [] };\n      });\n    }));\n  }\n  return _promise2.default.all(calls).then(function (_ref) {\n    var _ref2 = (0, _slicedToArray3.default)(_ref, 2),\n        ch = _ref2[0],\n        uch = _ref2[1];\n\n    /* uch array contains challenges where the user is participating in\n    @@ -111,8 +124,8 @@ function getAllActiveChallengesDone(uuid, tokenV3) {\n     * challenges in an efficient way. */\n    if (uch) {\n      var map = {};\n      uch.challenges.forEach(function (item) {\n        map[item.id] = item;\n      });\n      ch.challenges.forEach(function (item) {\n        if (map[item.id]) {\n          /* It is fine to reassing, as the array we modifying is created just\n           * above within the same function. */\n          /* eslint-disable no-param-reassign */\n          item.users[user] = true;\n          item.userDetails = map[item.id].userDetails;\n          /* eslint-enable no-param-reassign */\n        }\n      });\n    }\n\n    return {\n      uuid: uuid,\n      challenges: ch.challenges,\n      handle: user\n    };\n  });\n}\n\n/**\n * Gets 1 page of active challenges (including marathon matches) from the backend.\n * Once this action is completed any active challenges saved to the state before\n * will be dropped, and the newly fetched ones will be stored there.\n * Loading of all challenges wil start in background.\n * @param {String} uuid\n * @param {Number} page\n * @param {Object} backendFilter Backend filter to use.\n * @param {String} tokenV3 Optional. Topcoder auth token v3. Without token only\n *  public challenges will be fetched. With the token provided, the action will\n *  also fetch private challenges related to this user.\n * @param {Object} frontFilter\n * @param {String} sort\n * @param {String} bucket\n\n * @return {Promise}\n */\nfunction getActiveChallengesDone(uuid, page, backendFilter, tokenV3) {\n  var frontFilter = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n  var sort = arguments[5];\n  var bucket = arguments[6];\n\n  var filter = processFilter((0, _extends3.default)({}, backendFilter, {\n    status: 'ACTIVE'\n  }));\n\n  var service = getService(tokenV3);\n  var paginationParams = {\n    limit: PAGE_SIZE,\n    offset: page * PAGE_SIZE\n  };\n  var calls = [service.getChallenges(filter, paginationParams)];\n  var user = void 0;\n  if (tokenV3) {\n    user = (0, _tcAccounts.decodeToken)(tokenV3).handle;\n\n    var _decodeToken2 = (0, _tcAccounts.decodeToken)(tokenV3),\n        userId = _decodeToken2.userId;\n    // Handle any errors on this endpoint so that the non-user specific challenges\n    // will still be loaded.\n\n\n    calls.push(service.getUserChallenges(userId, user, filter, paginationParams));\n  }\n  return _promise2.default.all(calls).then(function (_ref3) {\n    var _ref4 = (0, _slicedToArray3.default)(_ref3, 2),\n        ch = _ref4[0],\n        uch = _ref4[1];\n\n    // let fullCH = ch;\n    /* uch array contains challenges where the user is participating in\n     * some role. The same challenge are already listed in res array, but they\n     * are not attributed to the user there. This block of code marks user\n     * challenges in an efficient way. */\n    if (uch) {\n      var map = {};\n      uch.challenges.forEach(function (item) {\n        map[item.id] = item;\n      });\n      ch.challenges.forEach(function (item) {\n        if (map[item.id]) {\n          /* It is fine to reassing, as the array we modifying is created just\n           * above within the same function. */\n          /* eslint-disable no-param-reassign */\n          item.users[user] = true;\n          item.userDetails = map[item.id].userDetails;\n          /* eslint-enable no-param-reassign */\n        }\n      });\n    }\n\n    var challenges = ch.challenges,\n        meta = ch.meta;\n    // filter by date range and re-compute meta\n    // we can safely remove the next two lines when backend support date range\n\n    challenges = filterUtil.filterByDate(challenges, frontFilter);\n    meta = filterUtil.newMeta(meta, challenges, frontFilter);\n    return {\n      uuid: uuid,\n      handle: tokenV3 ? user : null,\n      challenges: challenges,\n      meta: meta,\n      frontFilter: frontFilter,\n      sort: sort,\n      bucket: bucket,\n      tokenV3: tokenV3\n    };\n  });\n}\n\n/**\n * Init loading of all challenges\n * @param {String} uuid\n */\nfunction getRestActiveChallengesInit(uuid) {\n  return { uuid: uuid };\n}\n\n/**\n * Loading all challenges\n * @param {String} uuid\n * @param {String} tokenV3\n * @param {Object} backendFilter\n * @param {Object} frontFilter\n * @param {String} sort\n * @param {String} bucket\n */\nfunction getRestActiveChallengesDone(uuid, tokenV3, backendFilter, frontFilter, sort, bucket) {\n  var filter = processFilter((0, _extends3.default)({}, backendFilter, {\n    status: 'ACTIVE'\n  }));\n\n  var service = getService(tokenV3);\n  var calls = [getAll(function (params) {\n    return service.getChallenges(filter, params);\n  }, 1)];\n  var user = void 0;\n  if (tokenV3) {\n    user = (0, _tcAccounts.decodeToken)(tokenV3).handle;\n\n    var _decodeToken3 = (0, _tcAccounts.decodeToken)(tokenV3),\n        userId = _decodeToken3.userId;\n\n    calls.push(getAll(function (params) {\n      return service.getUserChallenges(userId, user, filter, params).catch(function () {\n        return { challenges: [] };\n      });\n    }), 1);\n  }\n  return _promise2.default.all(calls).then(function (_ref5) {\n    var _ref6 = (0, _slicedToArray3.default)(_ref5, 2),\n        ch = _ref6[0],\n        uch = _ref6[1];\n\n    /* uch array contains challenges where the user is participating in\n     * some role. The same challenge are already listed in res array, but they\n     * are not attributed to the user there. This block of code marks user\n     * challenges in an efficient way. */\n    if (uch) {\n      var map = {};\n      uch.challenges.forEach(function (item) {\n        map[item.id] = item;\n      });\n      ch.challenges.forEach(function (item) {\n        if (map[item.id]) {\n          /* It is fine to reassing, as the array we modifying is created just\n           * above within the same function. */\n          /* eslint-disable no-param-reassign */\n          item.users[user] = true;\n          item.userDetails = map[item.id].userDetails;\n          /* eslint-enable no-param-reassign */\n        }\n      });\n    }\n\n    var challenges = ch.challenges;\n    // filter by date range and re-compute meta\n    // we can safely remove the next two lines when backend support date range\n\n    challenges = filterUtil.filterByDate(challenges, frontFilter);\n    var meta = filterUtil.newMeta(undefined, challenges, frontFilter);\n\n    return {\n      uuid: uuid,\n      handle: tokenV3 ? user : null,\n      challenges: challenges,\n      frontFilter: frontFilter,\n      meta: meta,\n      sort: sort,\n      bucket: bucket\n    };\n  });\n}\n\n/**\n * Notifies the state that we are about to load the specified page of past\n * challenges.\n * @param {String} uuid\n * @param {Number} page\n * @param {Object} frontFilter\n * @param {String} sort\n * @return {Object}\n */\nfunction getPastChallengesInit(uuid, page, frontFilter, sort) {\n  return {\n    uuid: uuid,\n    page: page,\n    frontFilter: frontFilter,\n    sort: sort\n  };\n}\n\n/**\n * Gets the specified page of past challenges (including MMs).\n * @param {String} uuid\n * @param {Number} page Page of challenges to fetch.\n * @param {Object} filter Backend filter to use.\n * @param {String} tokenV3 Optional. Topcoder auth token v3.\n * @param {Object} frontFilter Optional. Original frontend filter.\n * @param {String} sort\n * @return {Object}\n */\nfunction getPastChallengesDone(uuid, page, filter, tokenV3) {\n  var frontFilter = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n  var sort = arguments[5];\n\n  var service = getService(tokenV3);\n  var newFilter = processFilter((0, _extends3.default)({}, filter, {\n    status: 'COMPLETED'\n  }));\n  return service.getChallenges(newFilter, {\n    limit: PAGE_SIZE,\n    offset: page * PAGE_SIZE\n  }).then(function (_ref7) {\n    var challenges = _ref7.challenges;\n    return {\n      uuid: uuid,\n      challenges: challenges,\n      frontFilter: frontFilter,\n      sort: sort\n    };\n  });\n}\n\n/**\n * Action to get a list of currently open Review Opportunities using V3 API\n * @param {String} uuid Unique identifier for init/donen instance from shortid module\n * @param {Number} page Page of review opportunities to fetch.\n * @param {String} tokenV3 Optional.\n * @param {String} sort Optional.\n * @param {Object} frontFilter Optional.\n * @return {Object} Action object\n */\nfunction getReviewOpportunitiesDone(uuid, page, tokenV3, sort) {\n  var frontFilter = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n  return getReviewOpportunitiesService(tokenV3).getReviewOpportunities(REVIEW_OPPORTUNITY_PAGE_SIZE, page * REVIEW_OPPORTUNITY_PAGE_SIZE).then(function (loaded) {\n    return {\n      uuid: uuid, loaded: loaded, sort: sort, frontFilter: frontFilter\n    };\n  }).catch(function (error) {\n    fireErrorMessage('Error Getting Review Opportunities', error.content || error);\n    return _promise2.default.reject(error);\n  });\n}\n\n/**\n * Payload creator for the action that inits the loading of SRMs.\n * @param {String} uuid\n * @return {String}\n */\nfunction getSrmsInit(uuid) {\n  return uuid;\n}\n\n/**\n * Payload creator for the action that loads SRMs.\n * @param {String} uuid\n * @param {String} handle\n * @param {Object} params\n * @param {String} tokenV3\n */\nfunction getSrmsDone(uuid, handle, params, tokenV3) {\n  var service = getService(tokenV3);\n  var promises = [service.getSrms(params)];\n  if (handle) {\n    promises.push(service.getUserSrms(handle, params));\n  }\n  return _promise2.default.all(promises).then(function (data) {\n    var srms = data[0];\n    var userSrms = data[1];\n    var userSrmsMap = {};\n    _lodash2.default.forEach(userSrms, function (srm) {\n      userSrmsMap[srm.id] = srm;\n    });\n    srms = _lodash2.default.map(srms, function (srm) {\n      if (userSrmsMap[srm.id]) {\n        return (0, _tc.processSRM)(srm);\n      }\n      return srm;\n    });\n    return { uuid: uuid, data: srms };\n  });\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  CHALLENGE_LISTING: {\n    DROP_CHALLENGES: function DROP_CHALLENGES(bucket) {\n      return { bucket: bucket };\n    },\n\n    GET_MORE_CHALLENGES: function GET_MORE_CHALLENGES(bucket) {\n      return { bucket: bucket };\n    },\n\n    GET_ALL_ACTIVE_CHALLENGES_INIT: getAllActiveChallengesInit,\n    GET_ALL_ACTIVE_CHALLENGES_DONE: getAllActiveChallengesDone,\n\n    GET_ACTIVE_CHALLENGES_INIT: getActiveChallengesInit,\n    GET_ACTIVE_CHALLENGES_DONE: getActiveChallengesDone,\n\n    GET_REST_ACTIVE_CHALLENGES_INIT: getRestActiveChallengesInit,\n    GET_REST_ACTIVE_CHALLENGES_DONE: getRestActiveChallengesDone,\n\n    GET_CHALLENGE_SUBTRACKS_INIT: _lodash2.default.noop,\n    GET_CHALLENGE_SUBTRACKS_DONE: getChallengeSubtracksDone,\n\n    GET_CHALLENGE_TAGS_INIT: _lodash2.default.noop,\n    GET_CHALLENGE_TAGS_DONE: getChallengeTagsDone,\n\n    GET_PAST_CHALLENGES_INIT: getPastChallengesInit,\n    GET_PAST_CHALLENGES_DONE: getPastChallengesDone,\n\n    GET_REVIEW_OPPORTUNITIES_INIT: function GET_REVIEW_OPPORTUNITIES_INIT(uuid, page, sort) {\n      return { uuid: uuid, page: page, sort: sort };\n    },\n    GET_REVIEW_OPPORTUNITIES_DONE: getReviewOpportunitiesDone,\n\n    GET_SRMS_INIT: getSrmsInit,\n    GET_SRMS_DONE: getSrmsDone,\n\n    EXPAND_TAG: function EXPAND_TAG(id) {\n      return id;\n    },\n\n    /* Pass in community ID. */\n    SELECT_COMMUNITY: _lodash2.default.identity,\n\n    SET_FILTER: _lodash2.default.identity,\n\n    SET_DATEPICKER_STATUS: function SET_DATEPICKER_STATUS(status) {\n      return { status: status };\n    },\n\n    SET_SORT: function SET_SORT(bucket, sort) {\n      return { bucket: bucket, sort: sort };\n    }\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(fireErrorMessage, 'fireErrorMessage', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getReviewOpportunitiesService, 'getReviewOpportunitiesService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(PAGE_SIZE, 'PAGE_SIZE', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(REVIEW_OPPORTUNITY_PAGE_SIZE, 'REVIEW_OPPORTUNITY_PAGE_SIZE', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(processFilter, 'processFilter', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getAll, 'getAll', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getChallengeSubtracksDone, 'getChallengeSubtracksDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getChallengeTagsDone, 'getChallengeTagsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getActiveChallengesInit, 'getActiveChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getAllActiveChallengesInit, 'getAllActiveChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getAllActiveChallengesDone, 'getAllActiveChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getActiveChallengesDone, 'getActiveChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getRestActiveChallengesInit, 'getRestActiveChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getRestActiveChallengesDone, 'getRestActiveChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getPastChallengesInit, 'getPastChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getPastChallengesDone, 'getPastChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getReviewOpportunitiesDone, 'getReviewOpportunitiesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getSrmsInit, 'getSrmsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(getSrmsDone, 'getSrmsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge-listing.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/challenge-listing.js?");
 
 /***/ }),
 
@@ -436,7 +436,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _challenges = __webpack_require__(/*! ../services/challenges */ \"./src/services/challenges.js\");\n\nvar _api = __webpack_require__(/*! ../services/api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.challenge\"\n       * @desc Actions related to Topcoder challenges APIs.\n       */\n\n/**\n * @static\n * @desc Creates an action that drops from Redux store all checkpoints loaded\n *  before.\n * @return {Action}\n */\nfunction dropCheckpoints() {}\n\n/**\n * @static\n * @desc Creates an action that drops from Redux store all challenge results\n *  loaded before.\n * @return {Action}\n */\nfunction dropResults() {}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of challenge details loading.\n * @param {Number|String} challengeId Challenge ID\n * @return {Action}\n */\nfunction getDetailsInit(challengeId) {\n  return _lodash2.default.toString(challengeId);\n}\n\n/**\n * @static\n * @desc Creates an action that loads challenge details.\n * @param {Number|String} challengeId Challenge ID.\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @param {String} tokenV2 Topcoder v2 auth token.\n * @return {Action}\n */\nfunction getDetailsDone(challengeId, tokenV3, tokenV2) {\n  var service = (0, _challenges.getService)(tokenV3, tokenV2);\n  var v3Promise = service.getChallengeDetails(challengeId);\n  return v3Promise;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of user submissions loading.\n * @param {String} challengeId Challenge ID.\n * @return {Action}\n */\nfunction getSubmissionsInit(challengeId) {\n  /* As a safeguard, we enforce challengeId to be string (in case somebody\n   * passes in a number, by mistake). */\n  return _lodash2.default.toString(challengeId);\n}\n\n/**\n * @static\n * @desc Creates an action that loads user's submissions to the specified\n * challenge.\n * @param {String} challengeId Challenge ID.\n * @param {String} tokenV2  Topcoder auth token v2.\n * @return {Action}\n */\nfunction getSubmissionsDone(challengeId, tokenV2) {\n  return (0, _api.getApi)('V2', tokenV2).fetch('/challenges/submissions/' + challengeId + '/mySubmissions').then(function (response) {\n    return response.json();\n  }).then(function (response) {\n    return {\n      challengeId: _lodash2.default.toString(challengeId),\n      submissions: response.submissions\n    };\n  }).catch(function (error) {\n    var err = { challengeId: _lodash2.default.toString(challengeId), error: error };\n    throw err;\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of registration for a\n * challenge.\n * @return {Action}\n */\nfunction registerInit() {}\n\n/**\n * @static\n * @desc Creates an action that registers user for a challenge.\n * @param {Object} auth An object that holds auth tokens. You can directly pass\n *  here the `auth` segment of Redux store.\n * @param [auth.tokenV2]{String} Topcoder auth token v2.\n * @param [auth.tokenV3]{String} Topcoder auth token v3.\n * @param {String} challengeId Challenge ID.\n * @return {Action}\n */\nfunction registerDone(auth, challengeId) {\n  return (0, _challenges.getService)(auth.tokenV3).register(challengeId)\n  /* As a part of registration flow we silently update challenge details,\n   * reusing for this purpose the corresponding action handler. */\n  // Uses a delay to allow API time to update\n  .then(function () {\n    return new _promise2.default(function (resolve) {\n      return setTimeout(function () {\n        return resolve(getDetailsDone(challengeId, auth.tokenV3, auth.tokenV2));\n      }, _topcoderReactUtils.config.CHALLENGE_DETAILS_REFRESH_DELAY);\n    });\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of user unregistration from a\n *  challenge.\n * @return {Action}\n */\nfunction unregisterInit() {}\n\n/**\n * @static\n * @desc Creates an action that unregisters user from a challenge.\n * @param {Object} auth Object that holds Topcoder auth tokens.\n * @param {String} [auth.tokenV2] v2 token.\n * @param {String} [auth.tokenV3] v3 token.\n * @param {String} challengeId Challenge ID.\n * @return {Action}\n */\nfunction unregisterDone(auth, challengeId) {\n  return (0, _challenges.getService)(auth.tokenV3).unregister(challengeId)\n  /* As a part of unregistration flow we silently update challenge details,\n   * reusing for this purpose the corresponding action handler. */\n  // Uses a delay to allow API time to update\n  .then(function () {\n    return new _promise2.default(function (resolve) {\n      return setTimeout(function () {\n        return resolve(getDetailsDone(challengeId, auth.tokenV3, auth.tokenV2));\n      }, _topcoderReactUtils.config.CHALLENGE_DETAILS_REFRESH_DELAY);\n    });\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of challenge results loading.\n * @param {Number|String} challengeId Challenge ID\n * @return {Action}\n */\nfunction loadResultsInit(challengeId) {\n  return _lodash2.default.toString(challengeId);\n}\n\n/**\n * @static\n * @desc Creates an action that loads challenge results.\n * @param {Object} auth Object that holds Topcoder auth tokens.\n * @param {String} [auth.tokenV2] v2 token.\n * @param {String} [auth.tokenV3] v3 token.\n * @param {Number|String} challengeId Challenge ID. Should match the one passed\n *  in the previous {@link module:actions.challenge.loadResultsInit} call.\n * @param {String} type Challenge type.\n * @return {Action}\n */\nfunction loadResultsDone(auth, challengeId, type) {\n  return (0, _api.getApi)('V2', auth.tokenV2).fetch('/' + type + '/challenges/result/' + challengeId).then(function (response) {\n    return response.json();\n  }).then(function (response) {\n    return {\n      challengeId: _lodash2.default.toString(challengeId),\n      results: response.results\n    };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of challenge checkpoints data\n *  loading.\n * @return {Action}\n */\nfunction fetchCheckpointsInit() {}\n\n/**\n * @static\n * @desc Creates an action that loads challenge checkpoints data.\n * @param {String} tokenV2 Topcoder v2 auth token.\n * @param {String} challengeId Challenge ID.\n */\nfunction fetchCheckpointsDone(tokenV2, challengeId) {\n  var endpoint = '/design/challenges/checkpoint/' + challengeId;\n  return (0, _api.getApi)('V2', tokenV2).fetch(endpoint).then(function (response) {\n    if (response.status !== 200) {\n      throw response.status;\n    } else {\n      return response.json();\n    }\n  }).then(function (response) {\n    // Expanded key is used for UI expand/collapse.\n    response.checkpointResults.forEach(function (checkpoint, index) {\n      response.checkpointResults[index].expanded = false;\n    });\n    return {\n      challengeId: Number(challengeId),\n      checkpoints: response\n    };\n  }).catch(function (error) {\n    return {\n      error: error,\n      challengeId: Number(challengeId)\n    };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that Toggles checkpoint details panel in the Topcoder\n *  Submission Management Page.\n * @todo This is UI action relevant to a specific page in specific app. Must be\n *  moved back to Community App.\n * @param {Number} id Checkpoint ID.\n * @param {Boolean} open Target state: `true` to expand, `false` to collapse the\n *  details.\n * @return {Action}\n */\nfunction toggleCheckpointFeedback(id, open) {\n  return { id: id, open: open };\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of challenge details update.\n * @todo No idea, why we have this action. This functionality should be covered\n *  by {@link module:actions.challenge.getDetailsInit} and\n *  {@link module:actions.challenge.getDetailsDone}. We need to refactor this.\n * @param {String} uuid UUID of the operation (the same should be passed into\n *  the corresponding {@link module:actions.challenge.updateChallengeDone}).\n * @return {Action}\n */\nfunction updateChallengeInit(uuid) {\n  return uuid;\n}\n\n/**\n * @static\n * @desc Creates an action that updates challenge details.\n * @todo No idea, why we have this action. This functionality should be covered\n *  by {@link module:actions.challenge.getDetailsInit} and\n *  {@link module:actions.challenge.getDetailsDone}. We need to refactor this.\n * @param {String} uuid Operation UUID. Should match the one passed into the\n *  previous {@link module:actions.challenge.updateChallengeInit} call.\n * @param {Object} challenge Challenge data.\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @return {Action}\n */\nfunction updateChallengeDone(uuid, challenge, tokenV3) {\n  return (0, _challenges.getService)(tokenV3).updateChallenge(challenge).then(function (res) {\n    return { uuid: uuid, res: res };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting count of user's active challenges.\n * @return {Action}\n */\nfunction getActiveChallengesCountInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets count of user's active challenges from the backend.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Optional. Topcoder auth token v3. Without token only\n *  public challenges will be counted. With the token provided, the action will\n *  also count private challenges related to this user.\n * @return {Action}\n */\nfunction getActiveChallengesCountDone(handle, tokenV3) {\n  return (0, _challenges.getService)(tokenV3).getActiveChallengesCount(handle);\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  CHALLENGE: {\n    DROP_CHECKPOINTS: dropCheckpoints,\n    DROP_RESULTS: dropResults,\n    FETCH_CHECKPOINTS_INIT: fetchCheckpointsInit,\n    FETCH_CHECKPOINTS_DONE: fetchCheckpointsDone,\n    GET_DETAILS_INIT: getDetailsInit,\n    GET_DETAILS_DONE: getDetailsDone,\n    GET_SUBMISSIONS_INIT: getSubmissionsInit,\n    GET_SUBMISSIONS_DONE: getSubmissionsDone,\n    LOAD_RESULTS_INIT: loadResultsInit,\n    LOAD_RESULTS_DONE: loadResultsDone,\n    REGISTER_INIT: registerInit,\n    REGISTER_DONE: registerDone,\n    TOGGLE_CHECKPOINT_FEEDBACK: toggleCheckpointFeedback,\n    UNREGISTER_INIT: unregisterInit,\n    UNREGISTER_DONE: unregisterDone,\n    UPDATE_CHALLENGE_INIT: updateChallengeInit,\n    UPDATE_CHALLENGE_DONE: updateChallengeDone,\n    GET_ACTIVE_CHALLENGES_COUNT_INIT: getActiveChallengesCountInit,\n    GET_ACTIVE_CHALLENGES_COUNT_DONE: getActiveChallengesCountDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(dropCheckpoints, 'dropCheckpoints', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(dropResults, 'dropResults', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getDetailsInit, 'getDetailsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getDetailsDone, 'getDetailsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getSubmissionsInit, 'getSubmissionsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getSubmissionsDone, 'getSubmissionsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(registerInit, 'registerInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(registerDone, 'registerDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(unregisterInit, 'unregisterInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(unregisterDone, 'unregisterDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(loadResultsInit, 'loadResultsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(loadResultsDone, 'loadResultsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(fetchCheckpointsInit, 'fetchCheckpointsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(fetchCheckpointsDone, 'fetchCheckpointsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(toggleCheckpointFeedback, 'toggleCheckpointFeedback', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(updateChallengeInit, 'updateChallengeInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(updateChallengeDone, 'updateChallengeDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getActiveChallengesCountInit, 'getActiveChallengesCountInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getActiveChallengesCountDone, 'getActiveChallengesCountDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/challenge.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/challenge.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _challenges = __webpack_require__(/*! ../services/challenges */ \"./src/services/challenges.js\");\n\nvar _api = __webpack_require__(/*! ../services/api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.challenge\"\n       * @desc Actions related to Topcoder challenges APIs.\n       */\n\n/**\n * @static\n * @desc Creates an action that drops from Redux store all checkpoints loaded\n *  before.\n * @return {Action}\n */\nfunction dropCheckpoints() {}\n\n/**\n * @static\n * @desc Creates an action that drops from Redux store all challenge results\n *  loaded before.\n * @return {Action}\n */\nfunction dropResults() {}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of challenge details loading.\n * @param {Number|String} challengeId Challenge ID\n * @return {Action}\n */\nfunction getDetailsInit(challengeId) {\n  return _lodash2.default.toString(challengeId);\n}\n\n/**\n * @static\n * @desc Creates an action that loads challenge details.\n * @param {Number|String} challengeId Challenge ID.\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @param {String} tokenV2 Topcoder v2 auth token.\n * @return {Action}\n */\nfunction getDetailsDone(challengeId, tokenV3, tokenV2) {\n  var service = (0, _challenges.getService)(tokenV3, tokenV2);\n  var v3Promise = service.getChallengeDetails(challengeId);\n  return v3Promise;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of user submissions loading.\n * @param {String} challengeId Challenge ID.\n * @return {Action}\n */\nfunction getSubmissionsInit(challengeId) {\n  /* As a safeguard, we enforce challengeId to be string (in case somebody\n   * passes in a number, by mistake). */\n  return _lodash2.default.toString(challengeId);\n}\n\n/**\n * @static\n * @desc Creates an action that loads user's submissions to the specified\n * challenge.\n * @param {String} challengeId Challenge ID.\n * @param {String} tokenV2  Topcoder auth token v2.\n * @return {Action}\n */\nfunction getSubmissionsDone(challengeId, tokenV2) {\n  return (0, _api.getApi)('V2', tokenV2).fetch('/challenges/submissions/' + challengeId + '/mySubmissions').then(function (response) {\n    return response.json();\n  }).then(function (response) {\n    return {\n      challengeId: _lodash2.default.toString(challengeId),\n      submissions: response.submissions\n    };\n  }).catch(function (error) {\n    var err = { challengeId: _lodash2.default.toString(challengeId), error: error };\n    throw err;\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of registration for a\n * challenge.\n * @return {Action}\n */\nfunction registerInit() {}\n\n/**\n * @static\n * @desc Creates an action that registers user for a challenge.\n * @param {Object} auth An object that holds auth tokens. You can directly pass\n *  here the `auth` segment of Redux store.\n * @param [auth.tokenV2]{String} Topcoder auth token v2.\n * @param [auth.tokenV3]{String} Topcoder auth token v3.\n * @param {String} challengeId Challenge ID.\n * @return {Action}\n */\nfunction registerDone(auth, challengeId) {\n  return (0, _challenges.getService)(auth.tokenV3).register(challengeId)\n  /* As a part of registration flow we silently update challenge details,\n   * reusing for this purpose the corresponding action handler. */\n  // Uses a delay to allow API time to update\n  .then(function () {\n    return new _promise2.default(function (resolve) {\n      return setTimeout(function () {\n        return resolve(getDetailsDone(challengeId, auth.tokenV3, auth.tokenV2));\n      }, _topcoderReactUtils.config.CHALLENGE_DETAILS_REFRESH_DELAY);\n    });\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of user unregistration from a\n *  challenge.\n * @return {Action}\n */\nfunction unregisterInit() {}\n\n/**\n * @static\n * @desc Creates an action that unregisters user from a challenge.\n * @param {Object} auth Object that holds Topcoder auth tokens.\n * @param {String} [auth.tokenV2] v2 token.\n * @param {String} [auth.tokenV3] v3 token.\n * @param {String} challengeId Challenge ID.\n * @return {Action}\n */\nfunction unregisterDone(auth, challengeId) {\n  return (0, _challenges.getService)(auth.tokenV3).unregister(challengeId)\n  /* As a part of unregistration flow we silently update challenge details,\n   * reusing for this purpose the corresponding action handler. */\n  // Uses a delay to allow API time to update\n  .then(function () {\n    return new _promise2.default(function (resolve) {\n      return setTimeout(function () {\n        return resolve(getDetailsDone(challengeId, auth.tokenV3, auth.tokenV2));\n      }, _topcoderReactUtils.config.CHALLENGE_DETAILS_REFRESH_DELAY);\n    });\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of challenge results loading.\n * @param {Number|String} challengeId Challenge ID\n * @return {Action}\n */\nfunction loadResultsInit(challengeId) {\n  return _lodash2.default.toString(challengeId);\n}\n\n/**\n * @static\n * @desc Creates an action that loads challenge results.\n * @param {Object} auth Object that holds Topcoder auth tokens.\n * @param {String} [auth.tokenV2] v2 token.\n * @param {String} [auth.tokenV3] v3 token.\n * @param {Number|String} challengeId Challenge ID. Should match the one passed\n *  in the previous {@link module:actions.challenge.loadResultsInit} call.\n * @param {String} type Challenge type.\n * @return {Action}\n */\nfunction loadResultsDone(auth, challengeId, type) {\n  return (0, _api.getApi)('V2', auth.tokenV2).fetch('/' + type + '/challenges/result/' + challengeId).then(function (response) {\n    return response.json();\n  }).then(function (response) {\n    return {\n      challengeId: _lodash2.default.toString(challengeId),\n      results: response.results\n    };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of challenge checkpoints data\n *  loading.\n * @return {Action}\n */\nfunction fetchCheckpointsInit() {}\n\n/**\n * @static\n * @desc Creates an action that loads challenge checkpoints data.\n * @param {String} tokenV2 Topcoder v2 auth token.\n * @param {String} challengeId Challenge ID.\n */\nfunction fetchCheckpointsDone(tokenV2, challengeId) {\n  var endpoint = '/design/challenges/checkpoint/' + challengeId;\n  return (0, _api.getApi)('V2', tokenV2).fetch(endpoint).then(function (response) {\n    if (response.status !== 200) {\n      throw response.status;\n    } else {\n      return response.json();\n    }\n  }).then(function (response) {\n    // Expanded key is used for UI expand/collapse.\n    response.checkpointResults.forEach(function (checkpoint, index) {\n      response.checkpointResults[index].expanded = false;\n    });\n    return {\n      challengeId: Number(challengeId),\n      checkpoints: response\n    };\n  }).catch(function (error) {\n    return {\n      error: error,\n      challengeId: Number(challengeId)\n    };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that Toggles checkpoint details panel in the Topcoder\n *  Submission Management Page.\n * @todo This is UI action relevant to a specific page in specific app. Must be\n *  moved back to Community App.\n * @param {Number} id Checkpoint ID.\n * @param {Boolean} open Target state: `true` to expand, `false` to collapse the\n *  details.\n * @return {Action}\n */\nfunction toggleCheckpointFeedback(id, open) {\n  return { id: id, open: open };\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of challenge details update.\n * @todo No idea, why we have this action. This functionality should be covered\n *  by {@link module:actions.challenge.getDetailsInit} and\n *  {@link module:actions.challenge.getDetailsDone}. We need to refactor this.\n * @param {String} uuid UUID of the operation (the same should be passed into\n *  the corresponding {@link module:actions.challenge.updateChallengeDone}).\n * @return {Action}\n */\nfunction updateChallengeInit(uuid) {\n  return uuid;\n}\n\n/**\n * @static\n * @desc Creates an action that updates challenge details.\n * @todo No idea, why we have this action. This functionality should be covered\n *  by {@link module:actions.challenge.getDetailsInit} and\n *  {@link module:actions.challenge.getDetailsDone}. We need to refactor this.\n * @param {String} uuid Operation UUID. Should match the one passed into the\n *  previous {@link module:actions.challenge.updateChallengeInit} call.\n * @param {Object} challenge Challenge data.\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @return {Action}\n */\nfunction updateChallengeDone(uuid, challenge, tokenV3) {\n  return (0, _challenges.getService)(tokenV3).updateChallenge(challenge).then(function (res) {\n    return { uuid: uuid, res: res };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting count of user's active challenges.\n * @return {Action}\n */\nfunction getActiveChallengesCountInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets count of user's active challenges from the backend.\n * @param {String} userId Topcoder user ID.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Optional. Topcoder auth token v3. Without token only\n *  public challenges will be counted. With the token provided, the action will\n *  also count private challenges related to this user.\n * @return {Action}\n */\nfunction getActiveChallengesCountDone(userId, handle, tokenV3) {\n  return (0, _challenges.getService)(tokenV3).getActiveChallengesCount(userId, handle);\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  CHALLENGE: {\n    DROP_CHECKPOINTS: dropCheckpoints,\n    DROP_RESULTS: dropResults,\n    FETCH_CHECKPOINTS_INIT: fetchCheckpointsInit,\n    FETCH_CHECKPOINTS_DONE: fetchCheckpointsDone,\n    GET_DETAILS_INIT: getDetailsInit,\n    GET_DETAILS_DONE: getDetailsDone,\n    GET_SUBMISSIONS_INIT: getSubmissionsInit,\n    GET_SUBMISSIONS_DONE: getSubmissionsDone,\n    LOAD_RESULTS_INIT: loadResultsInit,\n    LOAD_RESULTS_DONE: loadResultsDone,\n    REGISTER_INIT: registerInit,\n    REGISTER_DONE: registerDone,\n    TOGGLE_CHECKPOINT_FEEDBACK: toggleCheckpointFeedback,\n    UNREGISTER_INIT: unregisterInit,\n    UNREGISTER_DONE: unregisterDone,\n    UPDATE_CHALLENGE_INIT: updateChallengeInit,\n    UPDATE_CHALLENGE_DONE: updateChallengeDone,\n    GET_ACTIVE_CHALLENGES_COUNT_INIT: getActiveChallengesCountInit,\n    GET_ACTIVE_CHALLENGES_COUNT_DONE: getActiveChallengesCountDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(dropCheckpoints, 'dropCheckpoints', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(dropResults, 'dropResults', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getDetailsInit, 'getDetailsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getDetailsDone, 'getDetailsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getSubmissionsInit, 'getSubmissionsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getSubmissionsDone, 'getSubmissionsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(registerInit, 'registerInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(registerDone, 'registerDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(unregisterInit, 'unregisterInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(unregisterDone, 'unregisterDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(loadResultsInit, 'loadResultsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(loadResultsDone, 'loadResultsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(fetchCheckpointsInit, 'fetchCheckpointsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(fetchCheckpointsDone, 'fetchCheckpointsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(toggleCheckpointFeedback, 'toggleCheckpointFeedback', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(updateChallengeInit, 'updateChallengeInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(updateChallengeDone, 'updateChallengeDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getActiveChallengesCountInit, 'getActiveChallengesCountInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(getActiveChallengesCountDone, 'getActiveChallengesCountDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/challenge.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/challenge.js?");
 
 /***/ }),
 
@@ -448,7 +448,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Creates an action that loads projects related to a user.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {Boolean} hasActiveBillingAccount Optional. Defaults to false.\n *  Whether only projects with active billing accounts should be included\n *  into the results.\n * @return {Action}\n */\nvar getUserProjectsDone = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(tokenV3, hasActiveBillingAccount) {\n    var params, projects;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            params = {};\n\n            if (hasActiveBillingAccount) params.hasActiveBillingAccount = true;\n            _context.next = 4;\n            return (0, _direct.getService)(tokenV3).getUserProjects(params);\n\n          case 4:\n            projects = _context.sent;\n            return _context.abrupt('return', { tokenV3: tokenV3, projects: projects });\n\n          case 6:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function getUserProjectsDone(_x, _x2) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _direct = __webpack_require__(/*! ../services/direct */ \"./src/services/direct.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.direct\"\n       * @desc Actions related to Direct API: access to projects, billing accounts,\n       * copilot operations, and other similar stuff is handled by them.\n       */\n\n/**\n * @static\n * @desc Creates an action that drops out of Redux store all Direct-related\n *  data, loaded by other actions from this module, and also cancels any pending\n *  loading operations.\n * @return {Action}\n */\nfunction dropAll() {\n  return null;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of project details loading.\n * @param {Number} projectId Project ID.\n * @return {Action}\n */\nfunction getProjectDetailsInit(projectId) {\n  return projectId;\n}\n\n/**\n * @static\n * @desc Creates an action that loads project details.\n * @param {Number} projectId Project ID.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction getProjectDetailsDone(projectId, tokenV3) {\n  return (0, _direct.getService)(tokenV3).getProjectDetails(projectId);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of project permissions\n *  loading.\n * @param {Number|String} projectId Project ID.\n * @return {Action}\n */\nfunction getProjectPermissionsInit(projectId) {\n  return _lodash2.default.toNumber(projectId);\n}\n\n/**\n * @static\n * @desc Creates an action that loads project permissions.\n * @param {Number|String} projectId Project ID.\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @return {Action}\n */\nfunction getProjectPermissionsDone(projectId, tokenV3) {\n  return (0, _direct.getService)(tokenV3).getProjectPermissions(projectId).then(function (permissions) {\n    return { permissions: permissions, projectId: projectId };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading the projects\n *  related with a user.\n * @param {String} tokenV3 Topcoder v3 auth token of the user for who we load\n *  the projects.\n * @return {Action}\n */\nfunction getUserProjectsInit(tokenV3) {\n  return tokenV3;\n}\nvar _default = (0, _reduxActions.createActions)({\n  DIRECT: {\n    DROP_ALL: dropAll,\n    GET_PROJECT_DETAILS_INIT: getProjectDetailsInit,\n    GET_PROJECT_DETAILS_DONE: getProjectDetailsDone,\n    GET_PROJECT_PERMISSIONS_INIT: getProjectPermissionsInit,\n    GET_PROJECT_PERMISSIONS_DONE: getProjectPermissionsDone,\n    GET_USER_PROJECTS_INIT: getUserProjectsInit,\n    GET_USER_PROJECTS_DONE: getUserProjectsDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(dropAll, 'dropAll', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getProjectDetailsInit, 'getProjectDetailsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getProjectDetailsDone, 'getProjectDetailsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getProjectPermissionsInit, 'getProjectPermissionsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getProjectPermissionsDone, 'getProjectPermissionsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getUserProjectsInit, 'getUserProjectsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getUserProjectsDone, 'getUserProjectsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/direct.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/direct.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Creates an action that loads projects related to a user.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {Boolean} hasActiveBillingAccount Optional. Defaults to false.\n *  Whether only projects with active billing accounts should be included\n *  into the results.\n * @return {Action}\n */\nvar getUserProjectsDone = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(tokenV3, hasActiveBillingAccount) {\n    var params, projects;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            params = {};\n\n            if (hasActiveBillingAccount) params.hasActiveBillingAccount = true;\n            _context.next = 4;\n            return (0, _direct.getService)(tokenV3).getUserProjects(params);\n\n          case 4:\n            projects = _context.sent;\n            return _context.abrupt('return', { tokenV3: tokenV3, projects: projects });\n\n          case 6:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function getUserProjectsDone(_x, _x2) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _direct = __webpack_require__(/*! ../services/direct */ \"./src/services/direct.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.direct\"\n       * @desc Actions related to Direct API: access to projects, billing accounts,\n       * copilot operations, and other similar stuff is handled by them.\n       */\n\n/**\n * @static\n * @desc Creates an action that drops out of Redux store all Direct-related\n *  data, loaded by other actions from this module, and also cancels any pending\n *  loading operations.\n * @return {Action}\n */\nfunction dropAll() {\n  return null;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of project details loading.\n * @param {Number} projectId Project ID.\n * @return {Action}\n */\nfunction getProjectDetailsInit(projectId) {\n  return projectId;\n}\n\n/**\n * @static\n * @desc Creates an action that loads project details.\n * @param {Number} projectId Project ID.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction getProjectDetailsDone(projectId, tokenV3) {\n  return (0, _direct.getService)(tokenV3).getProjectDetails(projectId);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of project permissions\n *  loading.\n * @param {Number|String} projectId Project ID.\n * @return {Action}\n */\nfunction getProjectPermissionsInit(projectId) {\n  return _lodash2.default.toNumber(projectId);\n}\n\n/**\n * @static\n * @desc Creates an action that loads project permissions.\n * @param {Number|String} projectId Project ID.\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @return {Action}\n */\nfunction getProjectPermissionsDone(projectId, tokenV3) {\n  return (0, _direct.getService)(tokenV3).getProjectPermissions(projectId).then(function (permissions) {\n    return { permissions: permissions, projectId: projectId };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading the projects\n *  related with a user.\n * @param {String} tokenV3 Topcoder v3 auth token of the user for who we load\n *  the projects.\n * @return {Action}\n */\nfunction getUserProjectsInit(tokenV3) {\n  return tokenV3;\n}\nvar _default = (0, _reduxActions.createActions)({\n  DIRECT: {\n    DROP_ALL: dropAll,\n    GET_PROJECT_DETAILS_INIT: getProjectDetailsInit,\n    GET_PROJECT_DETAILS_DONE: getProjectDetailsDone,\n    GET_PROJECT_PERMISSIONS_INIT: getProjectPermissionsInit,\n    GET_PROJECT_PERMISSIONS_DONE: getProjectPermissionsDone,\n    GET_USER_PROJECTS_INIT: getUserProjectsInit,\n    GET_USER_PROJECTS_DONE: getUserProjectsDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(dropAll, 'dropAll', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getProjectDetailsInit, 'getProjectDetailsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getProjectDetailsDone, 'getProjectDetailsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getProjectPermissionsInit, 'getProjectPermissionsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getProjectPermissionsDone, 'getProjectPermissionsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getUserProjectsInit, 'getUserProjectsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(getUserProjectsDone, 'getUserProjectsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/direct.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/direct.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/direct.js?");
 
 /***/ }),
 
@@ -460,7 +460,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.errors\"\n       * @desc Actions related to the standard application-wide error handling and\n       * messaging.\n       *\n       * Pending to be documented. You are not supposed to use them directly anyway.\n       *\n       * @todo This module does not belong to `topcoder-react-lib`, it will be moved\n       *  to `topcoder-react-utils` soon.\n       */\n\n\nvar _default = (0, _reduxActions.createActions)({\n  ERRORS: {\n    CLEAR_ERROR: _lodash2.default.noop,\n    NEW_ERROR: function NEW_ERROR(title, details) {\n      return { title: title, details: details };\n    },\n    CLEAR_ALL_ERROR_ICONS: _lodash2.default.noop,\n    SET_ERROR_ICON: function SET_ERROR_ICON(id, title, message) {\n      return { id: id, title: title, message: message };\n    },\n    CLEAR_ERROR_ICON: function CLEAR_ERROR_ICON(id) {\n      return { id: id };\n    }\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/errors.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/errors.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.errors\"\n       * @desc Actions related to the standard application-wide error handling and\n       * messaging.\n       *\n       * Pending to be documented. You are not supposed to use them directly anyway.\n       *\n       * @todo This module does not belong to `topcoder-react-lib`, it will be moved\n       *  to `topcoder-react-utils` soon.\n       */\n\n\nvar _default = (0, _reduxActions.createActions)({\n  ERRORS: {\n    CLEAR_ERROR: _lodash2.default.noop,\n    NEW_ERROR: function NEW_ERROR(title, details) {\n      return { title: title, details: details };\n    },\n    CLEAR_ALL_ERROR_ICONS: _lodash2.default.noop,\n    SET_ERROR_ICON: function SET_ERROR_ICON(id, title, message) {\n      return { id: id, title: title, message: message };\n    },\n    CLEAR_ERROR_ICON: function CLEAR_ERROR_ICON(id) {\n      return { id: id };\n    }\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/errors.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/errors.js?");
 
 /***/ }),
 
@@ -472,7 +472,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _groups = __webpack_require__(/*! ../services/groups */ \"./src/services/groups.js\");\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.groups\"\n       * @desc Actions related to user groups.\n       * @todo Some group-related actions can be found elsewhere (e.g. addition of\n       * members to group is located inside tc-communities actions, because joining\n       * a community is equivalent to adding user to a group). It will be great to\n       * move such actions in here.\n       */\n\n/**\n * @static\n * @desc Creates an action that removes from Redux store all group data loaded\n *  before by other actions in this module, and also cancels any on-going\n *  loading operations.\n * @return {Action}\n */\nfunction dropGroups() {\n  return undefined;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of group data loading.\n * @param {String|String[]} groupIds ID, or an array of IDs, for groups to load.\n * @return {Action}\n */\nfunction getGroupsInit(groupIds) {\n  return groupIds;\n}\n\n/**\n * @static\n * @desc Creates an action that loads group data.\n * @param {String|String[]} groupIds ID, or an array of IDs, of groups to load.\n * @param {String} tokenV3 Optional. Topcoder v3 auth token.\n * @return {Action}\n */\nfunction getGroupsDone(groupIds, tokenV3) {\n  return (0, _groups.getService)(tokenV3).getGroupMap(groupIds);\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  GROUPS: {\n    DROP_GROUPS: dropGroups,\n    GET_GROUPS_INIT: getGroupsInit,\n    GET_GROUPS_DONE: getGroupsDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(dropGroups, 'dropGroups', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/groups.js');\n  reactHotLoader.register(getGroupsInit, 'getGroupsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/groups.js');\n  reactHotLoader.register(getGroupsDone, 'getGroupsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/groups.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/groups.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/groups.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _groups = __webpack_require__(/*! ../services/groups */ \"./src/services/groups.js\");\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.groups\"\n       * @desc Actions related to user groups.\n       * @todo Some group-related actions can be found elsewhere (e.g. addition of\n       * members to group is located inside tc-communities actions, because joining\n       * a community is equivalent to adding user to a group). It will be great to\n       * move such actions in here.\n       */\n\n/**\n * @static\n * @desc Creates an action that removes from Redux store all group data loaded\n *  before by other actions in this module, and also cancels any on-going\n *  loading operations.\n * @return {Action}\n */\nfunction dropGroups() {\n  return undefined;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of group data loading.\n * @param {String|String[]} groupIds ID, or an array of IDs, for groups to load.\n * @return {Action}\n */\nfunction getGroupsInit(groupIds) {\n  return groupIds;\n}\n\n/**\n * @static\n * @desc Creates an action that loads group data.\n * @param {String|String[]} groupIds ID, or an array of IDs, of groups to load.\n * @param {String} tokenV3 Optional. Topcoder v3 auth token.\n * @return {Action}\n */\nfunction getGroupsDone(groupIds, tokenV3) {\n  return (0, _groups.getService)(tokenV3).getGroupMap(groupIds);\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  GROUPS: {\n    DROP_GROUPS: dropGroups,\n    GET_GROUPS_INIT: getGroupsInit,\n    GET_GROUPS_DONE: getGroupsDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(dropGroups, 'dropGroups', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/groups.js');\n  reactHotLoader.register(getGroupsInit, 'getGroupsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/groups.js');\n  reactHotLoader.register(getGroupsDone, 'getGroupsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/groups.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/groups.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/groups.js?");
 
 /***/ }),
 
@@ -484,7 +484,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.actions = undefined;\n\nvar _auth = __webpack_require__(/*! ./auth */ \"./src/actions/auth.js\");\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _smp = __webpack_require__(/*! ./smp */ \"./src/actions/smp.js\");\n\nvar _smp2 = _interopRequireDefault(_smp);\n\nvar _stats = __webpack_require__(/*! ./stats */ \"./src/actions/stats.js\");\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nvar _terms = __webpack_require__(/*! ./terms */ \"./src/actions/terms.js\");\n\nvar _terms2 = _interopRequireDefault(_terms);\n\nvar _direct = __webpack_require__(/*! ./direct */ \"./src/actions/direct.js\");\n\nvar _direct2 = _interopRequireDefault(_direct);\n\nvar _groups = __webpack_require__(/*! ./groups */ \"./src/actions/groups.js\");\n\nvar _groups2 = _interopRequireDefault(_groups);\n\nvar _errors = __webpack_require__(/*! ./errors */ \"./src/actions/errors.js\");\n\nvar _errors2 = _interopRequireDefault(_errors);\n\nvar _challenge = __webpack_require__(/*! ./challenge */ \"./src/actions/challenge.js\");\n\nvar _challenge2 = _interopRequireDefault(_challenge);\n\nvar _profile = __webpack_require__(/*! ./profile */ \"./src/actions/profile.js\");\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nvar _members = __webpack_require__(/*! ./members */ \"./src/actions/members.js\");\n\nvar _members2 = _interopRequireDefault(_members);\n\nvar _memberTasks = __webpack_require__(/*! ./member-tasks */ \"./src/actions/member-tasks.js\");\n\nvar _memberTasks2 = _interopRequireDefault(_memberTasks);\n\nvar _reviewOpportunity = __webpack_require__(/*! ./reviewOpportunity */ \"./src/actions/reviewOpportunity.js\");\n\nvar _reviewOpportunity2 = _interopRequireDefault(_reviewOpportunity);\n\nvar _lookup = __webpack_require__(/*! ./lookup */ \"./src/actions/lookup.js\");\n\nvar _lookup2 = _interopRequireDefault(_lookup);\n\nvar _settings = __webpack_require__(/*! ./settings */ \"./src/actions/settings.js\");\n\nvar _settings2 = _interopRequireDefault(_settings);\n\nvar _looker = __webpack_require__(/*! ./looker */ \"./src/actions/looker.js\");\n\nvar _looker2 = _interopRequireDefault(_looker);\n\nvar _challengeListing = __webpack_require__(/*! ./challenge-listing */ \"./src/actions/challenge-listing.js\");\n\nvar _challengeListing2 = _interopRequireDefault(_challengeListing);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\nvar actions = exports.actions = {\n  auth: _auth2.default.auth,\n  smp: _smp2.default.smp,\n  challenge: _challenge2.default.challenge,\n  terms: _terms2.default.terms,\n  stats: _stats2.default.stats,\n  direct: _direct2.default.direct,\n  groups: _groups2.default.groups,\n  errors: _errors2.default.errors,\n  profile: _profile2.default.profile,\n  members: _members2.default.members,\n  memberTasks: _memberTasks2.default.memberTasks,\n  reviewOpportunity: _reviewOpportunity2.default.reviewOpportunity,\n  lookup: _lookup2.default.lookup,\n  settings: _settings2.default.settings,\n  looker: _looker2.default.looker,\n  challengeListing: _challengeListing2.default.challengeListing\n};\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(actions, 'actions', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/index.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/index.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/index.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.actions = undefined;\n\nvar _auth = __webpack_require__(/*! ./auth */ \"./src/actions/auth.js\");\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _smp = __webpack_require__(/*! ./smp */ \"./src/actions/smp.js\");\n\nvar _smp2 = _interopRequireDefault(_smp);\n\nvar _stats = __webpack_require__(/*! ./stats */ \"./src/actions/stats.js\");\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nvar _terms = __webpack_require__(/*! ./terms */ \"./src/actions/terms.js\");\n\nvar _terms2 = _interopRequireDefault(_terms);\n\nvar _direct = __webpack_require__(/*! ./direct */ \"./src/actions/direct.js\");\n\nvar _direct2 = _interopRequireDefault(_direct);\n\nvar _groups = __webpack_require__(/*! ./groups */ \"./src/actions/groups.js\");\n\nvar _groups2 = _interopRequireDefault(_groups);\n\nvar _errors = __webpack_require__(/*! ./errors */ \"./src/actions/errors.js\");\n\nvar _errors2 = _interopRequireDefault(_errors);\n\nvar _challenge = __webpack_require__(/*! ./challenge */ \"./src/actions/challenge.js\");\n\nvar _challenge2 = _interopRequireDefault(_challenge);\n\nvar _profile = __webpack_require__(/*! ./profile */ \"./src/actions/profile.js\");\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nvar _members = __webpack_require__(/*! ./members */ \"./src/actions/members.js\");\n\nvar _members2 = _interopRequireDefault(_members);\n\nvar _memberTasks = __webpack_require__(/*! ./member-tasks */ \"./src/actions/member-tasks.js\");\n\nvar _memberTasks2 = _interopRequireDefault(_memberTasks);\n\nvar _reviewOpportunity = __webpack_require__(/*! ./reviewOpportunity */ \"./src/actions/reviewOpportunity.js\");\n\nvar _reviewOpportunity2 = _interopRequireDefault(_reviewOpportunity);\n\nvar _lookup = __webpack_require__(/*! ./lookup */ \"./src/actions/lookup.js\");\n\nvar _lookup2 = _interopRequireDefault(_lookup);\n\nvar _settings = __webpack_require__(/*! ./settings */ \"./src/actions/settings.js\");\n\nvar _settings2 = _interopRequireDefault(_settings);\n\nvar _looker = __webpack_require__(/*! ./looker */ \"./src/actions/looker.js\");\n\nvar _looker2 = _interopRequireDefault(_looker);\n\nvar _challengeListing = __webpack_require__(/*! ./challenge-listing */ \"./src/actions/challenge-listing.js\");\n\nvar _challengeListing2 = _interopRequireDefault(_challengeListing);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\nvar actions = exports.actions = {\n  auth: _auth2.default.auth,\n  smp: _smp2.default.smp,\n  challenge: _challenge2.default.challenge,\n  terms: _terms2.default.terms,\n  stats: _stats2.default.stats,\n  direct: _direct2.default.direct,\n  groups: _groups2.default.groups,\n  errors: _errors2.default.errors,\n  profile: _profile2.default.profile,\n  members: _members2.default.members,\n  memberTasks: _memberTasks2.default.memberTasks,\n  reviewOpportunity: _reviewOpportunity2.default.reviewOpportunity,\n  lookup: _lookup2.default.lookup,\n  settings: _settings2.default.settings,\n  looker: _looker2.default.looker,\n  challengeListing: _challengeListing2.default.challengeListing\n};\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(actions, 'actions', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/index.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/index.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/index.js?");
 
 /***/ }),
 
@@ -496,7 +496,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Creates an action that gets look data by id.\n * @return {Action}\n */\nvar getLookerDone = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(lookerId) {\n    var data;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return (0, _looker.getService)().getLooker(lookerId);\n\n          case 2:\n            data = _context.sent;\n            return _context.abrupt('return', { data: data, lookerId: lookerId });\n\n          case 4:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function getLookerDone(_x) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _looker = __webpack_require__(/*! ../services/looker */ \"./src/services/looker.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.looker\"\n       * @desc Actions related to looker data.\n       */\n\nvar _default = (0, _reduxActions.createActions)({\n  LOOKER: {\n    GET_LOOKER_DONE: getLookerDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getLookerDone, 'getLookerDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/looker.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/looker.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/looker.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Creates an action that gets look data by id.\n * @return {Action}\n */\nvar getLookerDone = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(lookerId) {\n    var data;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return (0, _looker.getService)().getLooker(lookerId);\n\n          case 2:\n            data = _context.sent;\n            return _context.abrupt('return', { data: data, lookerId: lookerId });\n\n          case 4:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function getLookerDone(_x) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _looker = __webpack_require__(/*! ../services/looker */ \"./src/services/looker.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.looker\"\n       * @desc Actions related to looker data.\n       */\n\nvar _default = (0, _reduxActions.createActions)({\n  LOOKER: {\n    GET_LOOKER_DONE: getLookerDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getLookerDone, 'getLookerDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/looker.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/looker.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/looker.js?");
 
 /***/ }),
 
@@ -508,7 +508,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _lookup = __webpack_require__(/*! ../services/lookup */ \"./src/services/lookup.js\");\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.lookup\"\n       * @desc Actions related to lookup data.\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting all skill tags.\n * @return {Action}\n */\nfunction getSkillTagsInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets all skill tags.\n * @return {Action}\n */\nfunction getSkillTagsDone() {\n  var params = {\n    domain: 'SKILLS',\n    status: 'APPROVED'\n  };\n  return (0, _lookup.getService)().getTags(params);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting all countries.\n * @return {Action}\n */\nfunction getCountriesInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets all countries.\n * @return {Action}\n */\nfunction getCountriesDone() {\n  return (0, _lookup.getService)().getCountries();\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  LOOKUP: {\n    GET_SKILL_TAGS_INIT: getSkillTagsInit,\n    GET_SKILL_TAGS_DONE: getSkillTagsDone,\n    GET_COUNTRIES_INIT: getCountriesInit,\n    GET_COUNTRIES_DONE: getCountriesDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getSkillTagsInit, 'getSkillTagsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/lookup.js');\n  reactHotLoader.register(getSkillTagsDone, 'getSkillTagsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/lookup.js');\n  reactHotLoader.register(getCountriesInit, 'getCountriesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/lookup.js');\n  reactHotLoader.register(getCountriesDone, 'getCountriesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/lookup.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/lookup.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/lookup.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _lookup = __webpack_require__(/*! ../services/lookup */ \"./src/services/lookup.js\");\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.lookup\"\n       * @desc Actions related to lookup data.\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting all skill tags.\n * @return {Action}\n */\nfunction getSkillTagsInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets all skill tags.\n * @return {Action}\n */\nfunction getSkillTagsDone() {\n  var params = {\n    domain: 'SKILLS',\n    status: 'APPROVED'\n  };\n  return (0, _lookup.getService)().getTags(params);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting all countries.\n * @return {Action}\n */\nfunction getCountriesInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets all countries.\n * @return {Action}\n */\nfunction getCountriesDone() {\n  return (0, _lookup.getService)().getCountries();\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  LOOKUP: {\n    GET_SKILL_TAGS_INIT: getSkillTagsInit,\n    GET_SKILL_TAGS_DONE: getSkillTagsDone,\n    GET_COUNTRIES_INIT: getCountriesInit,\n    GET_COUNTRIES_DONE: getCountriesDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getSkillTagsInit, 'getSkillTagsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/lookup.js');\n  reactHotLoader.register(getSkillTagsDone, 'getSkillTagsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/lookup.js');\n  reactHotLoader.register(getCountriesInit, 'getCountriesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/lookup.js');\n  reactHotLoader.register(getCountriesDone, 'getCountriesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/lookup.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/lookup.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/lookup.js?");
 
 /***/ }),
 
@@ -520,7 +520,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PAGE_SIZE = undefined;\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _challenges = __webpack_require__(/*! ../services/challenges */ \"./src/services/challenges.js\");\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.member-tasks\"\n       * @desc Actions for management of member tasks and payments. Under the hood it\n       * is very similar to the challenge listing management, as these tasks are in\n       * fact just challenges of a special kind); however, due to differences in the\n       * use cases, we can implement task management more efficient with dedicated\n       * actions and reducer; thus, this module.\n       */\n\n/**\n * Holds the size of member tasks page for the MEMBER_TASK/GET_DONE\n * action. Mind that current version of TC API v3 restricts the possible page\n * size by 50 tasks anyway, thus setting this to a larger value will result in\n * problems.\n */\nvar PAGE_SIZE = exports.PAGE_SIZE = 50;\n\n/**\n * @static\n * @desc Creates an action that removes all loaded member tasks from Redux\n * store, and cancels any on-going loading operations.\n * @return {Action}\n */\nfunction dropAll() {\n  return null;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of member tasks page loading.\n * Note that dispatching this action before a previous loading operation has\n * been completed will cancel the previous loading operation.\n * @param {String} uuid UUID of the loading operation.\n * @param {Number} pageNum 0-based index of the page to load (PAGE_SIZE constant\n *  holds the page size).\n * @return {Action}\n */\nfunction getInit(uuid, pageNum) {\n  return { pageNum: pageNum, uuid: uuid };\n}\n\n/**\n * @static\n * @desc Creates an action that loads a page of member tasks.\n * Prior to this action always dispatch\n * {@link module:actions.member-tasks.getInit} action with\n * the same arguments. The result of this action will be silently\n * discarted if its uuid is not stored in the Redux list of pending requests\n * to load tasks.\n * @param {String} uuid UUID of the loading operation.\n * @param {String} projectId Project filter for tasks.\n * @param {Number} pageNum 0-based index of the page to load (PAGE_SIZE constant\n *  holds the page size).\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @return {Action}\n */\nfunction getDone(uuid, projectId, pageNum, tokenV3) {\n  return (0, _challenges.getService)(tokenV3).getChallenges({\n    isTask: 1,\n    projectId: projectId\n  }, {\n    limit: PAGE_SIZE,\n    offset: pageNum * PAGE_SIZE\n  }).then(function (_ref) {\n    var challenges = _ref.challenges,\n        totalCount = _ref.totalCount;\n    return {\n      projectId: projectId,\n      tasks: challenges,\n      totalCount: totalCount,\n      uuid: uuid\n    };\n  });\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  MEMBER_TASKS: {\n    DROP_ALL: dropAll,\n    GET_INIT: getInit,\n    GET_DONE: getDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(PAGE_SIZE, 'PAGE_SIZE', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/member-tasks.js');\n  reactHotLoader.register(dropAll, 'dropAll', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/member-tasks.js');\n  reactHotLoader.register(getInit, 'getInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/member-tasks.js');\n  reactHotLoader.register(getDone, 'getDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/member-tasks.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/member-tasks.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/member-tasks.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PAGE_SIZE = undefined;\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _challenges = __webpack_require__(/*! ../services/challenges */ \"./src/services/challenges.js\");\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.member-tasks\"\n       * @desc Actions for management of member tasks and payments. Under the hood it\n       * is very similar to the challenge listing management, as these tasks are in\n       * fact just challenges of a special kind); however, due to differences in the\n       * use cases, we can implement task management more efficient with dedicated\n       * actions and reducer; thus, this module.\n       */\n\n/**\n * Holds the size of member tasks page for the MEMBER_TASK/GET_DONE\n * action. Mind that current version of TC API v3 restricts the possible page\n * size by 50 tasks anyway, thus setting this to a larger value will result in\n * problems.\n */\nvar PAGE_SIZE = exports.PAGE_SIZE = 50;\n\n/**\n * @static\n * @desc Creates an action that removes all loaded member tasks from Redux\n * store, and cancels any on-going loading operations.\n * @return {Action}\n */\nfunction dropAll() {\n  return null;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of member tasks page loading.\n * Note that dispatching this action before a previous loading operation has\n * been completed will cancel the previous loading operation.\n * @param {String} uuid UUID of the loading operation.\n * @param {Number} pageNum 0-based index of the page to load (PAGE_SIZE constant\n *  holds the page size).\n * @return {Action}\n */\nfunction getInit(uuid, pageNum) {\n  return { pageNum: pageNum, uuid: uuid };\n}\n\n/**\n * @static\n * @desc Creates an action that loads a page of member tasks.\n * Prior to this action always dispatch\n * {@link module:actions.member-tasks.getInit} action with\n * the same arguments. The result of this action will be silently\n * discarted if its uuid is not stored in the Redux list of pending requests\n * to load tasks.\n * @param {String} uuid UUID of the loading operation.\n * @param {String} projectId Project filter for tasks.\n * @param {Number} pageNum 0-based index of the page to load (PAGE_SIZE constant\n *  holds the page size).\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @return {Action}\n */\nfunction getDone(uuid, projectId, pageNum, tokenV3) {\n  return (0, _challenges.getService)(tokenV3).getChallenges({\n    isTask: 1,\n    projectId: projectId\n  }, {\n    limit: PAGE_SIZE,\n    offset: pageNum * PAGE_SIZE\n  }).then(function (_ref) {\n    var challenges = _ref.challenges,\n        totalCount = _ref.totalCount;\n    return {\n      projectId: projectId,\n      tasks: challenges,\n      totalCount: totalCount,\n      uuid: uuid\n    };\n  });\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  MEMBER_TASKS: {\n    DROP_ALL: dropAll,\n    GET_INIT: getInit,\n    GET_DONE: getDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(PAGE_SIZE, 'PAGE_SIZE', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/member-tasks.js');\n  reactHotLoader.register(dropAll, 'dropAll', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/member-tasks.js');\n  reactHotLoader.register(getInit, 'getInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/member-tasks.js');\n  reactHotLoader.register(getDone, 'getDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/member-tasks.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/member-tasks.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/member-tasks.js?");
 
 /***/ }),
 
@@ -532,7 +532,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Creates an action that loads member achievements.\n * @param {String} handle Member handle.\n * @param {String} uuid Loading operation\n * @return {Action}\n */\nvar getAchievementsDone = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(handle, uuid) {\n    var data;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            data = void 0;\n            _context.prev = 1;\n            _context.next = 4;\n            return (0, _user.getService)().getAchievements(handle);\n\n          case 4:\n            data = _context.sent;\n            _context.next = 10;\n            break;\n\n          case 7:\n            _context.prev = 7;\n            _context.t0 = _context['catch'](1);\n\n            data = [];\n\n          case 10:\n            return _context.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 11:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this, [[1, 7]]);\n  }));\n\n  return function getAchievementsDone(_x, _x2) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that loads member achievements from v3 API.\n * @param {String} handle Member handle.\n * @param {String} uuid Loading operation\n * @return {Action}\n */\n\n\nvar getAchievementsV3Done = function () {\n  var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(handle, uuid) {\n    var data;\n    return _regenerator2.default.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            data = void 0;\n            _context2.prev = 1;\n            _context2.next = 4;\n            return (0, _user.getService)().getAchievementsV3(handle);\n\n          case 4:\n            data = _context2.sent;\n            _context2.next = 10;\n            break;\n\n          case 7:\n            _context2.prev = 7;\n            _context2.t0 = _context2['catch'](1);\n\n            data = [];\n\n          case 10:\n            return _context2.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 11:\n          case 'end':\n            return _context2.stop();\n        }\n      }\n    }, _callee2, this, [[1, 7]]);\n  }));\n\n  return function getAchievementsV3Done(_x3, _x4) {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading the member's\n *  financial information.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\n/**\n * @static\n * @desc Creates an action that loads member's financial information.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\nvar getFinancesDone = function () {\n  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(handle, uuid, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee3$(_context3) {\n      while (1) {\n        switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return (0, _members.getService)(tokenV3).getMemberFinances(handle);\n\n          case 2:\n            data = _context3.sent;\n            return _context3.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 4:\n          case 'end':\n            return _context3.stop();\n        }\n      }\n    }, _callee3, this);\n  }));\n\n  return function getFinancesDone(_x5, _x6, _x7) {\n    return _ref3.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that signals beginning of member stats loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getStatsInit = function () {\n  var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee4$(_context4) {\n      while (1) {\n        switch (_context4.prev = _context4.next) {\n          case 0:\n            return _context4.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context4.stop();\n        }\n      }\n    }, _callee4, this);\n  }));\n\n  return function getStatsInit(_x8, _x9) {\n    return _ref4.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads member statistics.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar getStatsDone = function () {\n  var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(handle, uuid, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee5$(_context5) {\n      while (1) {\n        switch (_context5.prev = _context5.next) {\n          case 0:\n            _context5.next = 2;\n            return (0, _members.getService)(tokenV3).getStats(handle);\n\n          case 2:\n            data = _context5.sent;\n            return _context5.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 4:\n          case 'end':\n            return _context5.stop();\n        }\n      }\n    }, _callee5, this);\n  }));\n\n  return function getStatsDone(_x10, _x11, _x12) {\n    return _ref5.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Payload creator for the action that inits the loading of member active challenges.\n * @param {String} handle\n * @param {String} uuid\n * @returns {Object} Payload\n */\n\n\nvar getActiveChallengesInit = function () {\n  var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee6$(_context6) {\n      while (1) {\n        switch (_context6.prev = _context6.next) {\n          case 0:\n            return _context6.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context6.stop();\n        }\n      }\n    }, _callee6, this);\n  }));\n\n  return function getActiveChallengesInit(_x13, _x14) {\n    return _ref6.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Payload creator for the action that loads the member active challenges.\n * @param {String} handle\n * @param {String} uuid\n * @param {String} tokenV3\n * @returns {Object} Payload\n */\n\n\nvar getActiveChallengesDone = function () {\n  var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(handle, uuid, tokenV3) {\n    var filter, service, getAll, calls, _ref9, _ref10, challenges;\n\n    return _regenerator2.default.wrap(function _callee7$(_context7) {\n      while (1) {\n        switch (_context7.prev = _context7.next) {\n          case 0:\n            getAll = function getAll(getter) {\n              var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n              var prev = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n              var PAGE_SIZE = 50;\n              return getter({\n                limit: PAGE_SIZE,\n                offset: page * PAGE_SIZE\n              }).then(function (_ref8) {\n                var chunk = _ref8.challenges;\n\n                if (!chunk.length) return prev || [];\n                return getAll(getter, 1 + page, prev ? prev.concat(chunk) : chunk);\n              });\n            };\n\n            filter = { status: 'ACTIVE' };\n            service = (0, _challenges.getService)(tokenV3);\n            /* TODO: Reuse `getAll` from `actions/challenge-listing`\n            /* after it moved from `community-app` to here.\n             */\n\n            calls = [getAll(function (params) {\n              return service.getUserChallenges(handle, filter, params);\n            })];\n            _context7.next = 6;\n            return _promise2.default.all(calls);\n\n          case 6:\n            _ref9 = _context7.sent;\n            _ref10 = (0, _slicedToArray3.default)(_ref9, 1);\n            challenges = _ref10[0];\n            return _context7.abrupt('return', { handle: handle, challenges: challenges, uuid: uuid });\n\n          case 10:\n          case 'end':\n            return _context7.stop();\n        }\n      }\n    }, _callee7, this);\n  }));\n\n  return function getActiveChallengesDone(_x15, _x16, _x17) {\n    return _ref7.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of member stats distribution history.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getStatsHistoryInit = function () {\n  var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee8$(_context8) {\n      while (1) {\n        switch (_context8.prev = _context8.next) {\n          case 0:\n            return _context8.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context8.stop();\n        }\n      }\n    }, _callee8, this);\n  }));\n\n  return function getStatsHistoryInit(_x20, _x21) {\n    return _ref11.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member stats history.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar getStatsHistoryDone = function () {\n  var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(handle, uuid, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee9$(_context9) {\n      while (1) {\n        switch (_context9.prev = _context9.next) {\n          case 0:\n            _context9.next = 2;\n            return (0, _members.getService)(tokenV3).getStatsHistory(handle);\n\n          case 2:\n            data = _context9.sent;\n            return _context9.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 4:\n          case 'end':\n            return _context9.stop();\n        }\n      }\n    }, _callee9, this);\n  }));\n\n  return function getStatsHistoryDone(_x22, _x23, _x24) {\n    return _ref12.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of member stats distribution loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getStatsDistributionInit = function () {\n  var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee10$(_context10) {\n      while (1) {\n        switch (_context10.prev = _context10.next) {\n          case 0:\n            return _context10.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context10.stop();\n        }\n      }\n    }, _callee10, this);\n  }));\n\n  return function getStatsDistributionInit(_x25, _x26) {\n    return _ref13.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member stats distribution.\n * @param {String} handle Member handle.\n * @param {String} track Main track name.\n * @param {String} subTrack Subtrack name.\n * @param {String} uuid Operation UUID.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar getStatsDistributionDone = function () {\n  var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(handle, track, subTrack, uuid, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee11$(_context11) {\n      while (1) {\n        switch (_context11.prev = _context11.next) {\n          case 0:\n            _context11.next = 2;\n            return (0, _members.getService)(tokenV3).getStatsDistribution(handle, track, subTrack);\n\n          case 2:\n            data = _context11.sent;\n            return _context11.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 4:\n          case 'end':\n            return _context11.stop();\n        }\n      }\n    }, _callee11, this);\n  }));\n\n  return function getStatsDistributionDone(_x27, _x28, _x29, _x30, _x31) {\n    return _ref14.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of subtrack challenges loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getSubtrackChallengesInit = function () {\n  var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee12$(_context12) {\n      while (1) {\n        switch (_context12.prev = _context12.next) {\n          case 0:\n            return _context12.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context12.stop();\n        }\n      }\n    }, _callee12, this);\n  }));\n\n  return function getSubtrackChallengesInit(_x32, _x33) {\n    return _ref15.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member subtrack challenges.\n * @param {String} uuid Operation UUID.\n * @param {String} handle Member handle.\n * @param {String} tokenV3 v3 auth token.\n * @param {String} track Main track name.\n * @param {String} subTrack Subtrack name.\n * @param {Number} start page.\n * @param {Number} page size.\n * @param {Boolean} whether to refresh.\n * @return {Action}\n */\n\n\nvar getSubtrackChallengesDone = function () {\n  var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(uuid, handle, tokenV3, track, subTrack, pageNum, pageSize, refresh) {\n    var filter, params, service;\n    return _regenerator2.default.wrap(function _callee13$(_context13) {\n      while (1) {\n        switch (_context13.prev = _context13.next) {\n          case 0:\n            filter = {\n              status: 'completed',\n              hasUserSubmittedForReview: 'true',\n              track: track,\n              subTrack: subTrack\n            };\n            params = {};\n\n            params.orderBy = 'submissionEndDate desc';\n            params.limit = pageSize;\n            params.offset = pageNum * pageSize;\n\n            service = (0, _challenges.getService)(tokenV3);\n            return _context13.abrupt('return', service.getUserChallenges(handle, filter, params).then(function (res) {\n              return {\n                uuid: uuid,\n                challenges: res.challenges,\n                refresh: refresh,\n                handle: handle\n              };\n            }));\n\n          case 7:\n          case 'end':\n            return _context13.stop();\n        }\n      }\n    }, _callee13, this);\n  }));\n\n  return function getSubtrackChallengesDone(_x34, _x35, _x36, _x37, _x38, _x39, _x40, _x41) {\n    return _ref16.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of member SRM loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getUserSRMInit = function () {\n  var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee14$(_context14) {\n      while (1) {\n        switch (_context14.prev = _context14.next) {\n          case 0:\n            return _context14.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context14.stop();\n        }\n      }\n    }, _callee14, this);\n  }));\n\n  return function getUserSRMInit(_x42, _x43) {\n    return _ref17.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member SRM.\n * @param {String} uuid Operation UUID.\n * @param {String} handle Member handle.\n * @param {String} tokenV3 v3 auth token.\n * @param {Number} start page.\n * @param {Number} page size.\n * @param {Boolean} whether to refresh.\n * @return {Action}\n */\n\n\nvar getUserSRMDone = function () {\n  var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(uuid, handle, tokenV3, pageNum, pageSize, refresh) {\n    var filter, params, service;\n    return _regenerator2.default.wrap(function _callee15$(_context15) {\n      while (1) {\n        switch (_context15.prev = _context15.next) {\n          case 0:\n            filter = {\n              status: 'past',\n              isRatedForSRM: 'true'\n            };\n            params = {\n              filter: _qs2.default.stringify(filter, { encode: false }),\n              limit: pageSize,\n              offset: pageNum * pageSize\n            };\n            service = (0, _challenges.getService)(tokenV3);\n            return _context15.abrupt('return', service.getUserSrms(handle, params).then(function (res) {\n              return {\n                uuid: uuid,\n                srms: res,\n                refresh: refresh,\n                handle: handle\n              };\n            }));\n\n          case 4:\n          case 'end':\n            return _context15.stop();\n        }\n      }\n    }, _callee15, this);\n  }));\n\n  return function getUserSRMDone(_x44, _x45, _x46, _x47, _x48, _x49) {\n    return _ref18.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of member marathon loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getUserMarathonInit = function () {\n  var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee16$(_context16) {\n      while (1) {\n        switch (_context16.prev = _context16.next) {\n          case 0:\n            return _context16.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context16.stop();\n        }\n      }\n    }, _callee16, this);\n  }));\n\n  return function getUserMarathonInit(_x50, _x51) {\n    return _ref19.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member marathon.\n * @param {String} uuid Operation UUID.\n * @param {String} handle Member handle.\n * @param {String} tokenV3 v3 auth token.\n * @param {Number} start page.\n * @param {Number} page size.\n * @param {Boolean} whether to refresh.\n * @return {Action}\n */\n\n\nvar getUserMarathonDone = function () {\n  var _ref20 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(uuid, handle, tokenV3, pageNum, pageSize, refresh) {\n    var filter, params, service;\n    return _regenerator2.default.wrap(function _callee17$(_context17) {\n      while (1) {\n        switch (_context17.prev = _context17.next) {\n          case 0:\n            filter = { status: 'PAST', isRatedForMM: 'true' };\n            params = {};\n\n            params.orderBy = 'endDate desc';\n            params.limit = pageSize;\n            params.offset = pageNum * pageSize;\n\n            service = (0, _challenges.getService)(tokenV3);\n            return _context17.abrupt('return', service.getUserMarathonMatches(handle, filter, params).then(function (res) {\n              return {\n                uuid: uuid,\n                marathons: res,\n                refresh: refresh,\n                handle: handle\n              };\n            }));\n\n          case 7:\n          case 'end':\n            return _context17.stop();\n        }\n      }\n    }, _callee17, this);\n  }));\n\n  return function getUserMarathonDone(_x52, _x53, _x54, _x55, _x56, _x57) {\n    return _ref20.apply(this, arguments);\n  };\n}();\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _members = __webpack_require__(/*! ../services/members */ \"./src/services/members.js\");\n\nvar _user = __webpack_require__(/*! ../services/user */ \"./src/services/user.js\");\n\nvar _challenges = __webpack_require__(/*! ../services/challenges */ \"./src/services/challenges.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.members\"\n       * @desc Actions related to members data.\n       */\n\n/**\n * @static\n * @desc Creates an action that drops all information related to the specfied\n *  member.\n * @param {String} handle Topcoder user handle.\n * @return {Action}\n */\nfunction drop(handle) {\n  return handle;\n}\n\n/**\n * @static\n * @desc Creates an action that drops all member information loaded by\n *  actions from this module.\n * @return {Action}\n */\nfunction dropAll() {}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of member achievements\n *  loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Loading operation UUID.\n * @return {Action}\n */\nfunction getAchievementsInit(handle, uuid) {\n  return { handle: handle, uuid: uuid };\n}function getFinancesInit(handle, uuid) {\n  return { handle: handle, uuid: uuid };\n}\nvar _default = (0, _reduxActions.createActions)({\n  MEMBERS: {\n    DROP: drop,\n    DROP_ALL: dropAll,\n    GET_ACHIEVEMENTS_INIT: getAchievementsInit,\n    GET_ACHIEVEMENTS_DONE: getAchievementsDone,\n    GET_ACHIEVEMENTS_V3_DONE: getAchievementsV3Done,\n    GET_FINANCES_INIT: getFinancesInit,\n    GET_FINANCES_DONE: getFinancesDone,\n    GET_STATS_INIT: getStatsInit,\n    GET_STATS_DONE: getStatsDone,\n    GET_STATS_HISTORY_INIT: getStatsHistoryInit,\n    GET_STATS_HISTORY_DONE: getStatsHistoryDone,\n    GET_STATS_DISTRIBUTION_INIT: getStatsDistributionInit,\n    GET_STATS_DISTRIBUTION_DONE: getStatsDistributionDone,\n    GET_ACTIVE_CHALLENGES_INIT: getActiveChallengesInit,\n    GET_ACTIVE_CHALLENGES_DONE: getActiveChallengesDone,\n    GET_SUBTRACK_CHALLENGES_INIT: getSubtrackChallengesInit,\n    GET_SUBTRACK_CHALLENGES_DONE: getSubtrackChallengesDone,\n    GET_USER_SRM_INIT: getUserSRMInit,\n    GET_USER_SRM_DONE: getUserSRMDone,\n    GET_USER_MARATHON_INIT: getUserMarathonInit,\n    GET_USER_MARATHON_DONE: getUserMarathonDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(drop, 'drop', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(dropAll, 'dropAll', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getAchievementsInit, 'getAchievementsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getAchievementsDone, 'getAchievementsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getAchievementsV3Done, 'getAchievementsV3Done', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getFinancesInit, 'getFinancesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getFinancesDone, 'getFinancesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsInit, 'getStatsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsDone, 'getStatsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getActiveChallengesInit, 'getActiveChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getActiveChallengesDone, 'getActiveChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsHistoryInit, 'getStatsHistoryInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsHistoryDone, 'getStatsHistoryDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsDistributionInit, 'getStatsDistributionInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsDistributionDone, 'getStatsDistributionDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getSubtrackChallengesInit, 'getSubtrackChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getSubtrackChallengesDone, 'getSubtrackChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getUserSRMInit, 'getUserSRMInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getUserSRMDone, 'getUserSRMDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getUserMarathonInit, 'getUserMarathonInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getUserMarathonDone, 'getUserMarathonDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/members.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/members.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Creates an action that loads member achievements.\n * @param {String} handle Member handle.\n * @param {String} uuid Loading operation\n * @return {Action}\n */\nvar getAchievementsDone = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(handle, uuid) {\n    var data;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            data = void 0;\n            _context.prev = 1;\n            _context.next = 4;\n            return (0, _user.getService)().getAchievements(handle);\n\n          case 4:\n            data = _context.sent;\n            _context.next = 10;\n            break;\n\n          case 7:\n            _context.prev = 7;\n            _context.t0 = _context['catch'](1);\n\n            data = [];\n\n          case 10:\n            return _context.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 11:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this, [[1, 7]]);\n  }));\n\n  return function getAchievementsDone(_x, _x2) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that loads member achievements from v3 API.\n * @param {String} handle Member handle.\n * @param {String} uuid Loading operation\n * @return {Action}\n */\n\n\nvar getAchievementsV3Done = function () {\n  var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(handle, uuid) {\n    var data;\n    return _regenerator2.default.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            data = void 0;\n            _context2.prev = 1;\n            _context2.next = 4;\n            return (0, _user.getService)().getAchievementsV3(handle);\n\n          case 4:\n            data = _context2.sent;\n            _context2.next = 10;\n            break;\n\n          case 7:\n            _context2.prev = 7;\n            _context2.t0 = _context2['catch'](1);\n\n            data = [];\n\n          case 10:\n            return _context2.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 11:\n          case 'end':\n            return _context2.stop();\n        }\n      }\n    }, _callee2, this, [[1, 7]]);\n  }));\n\n  return function getAchievementsV3Done(_x3, _x4) {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading the member's\n *  financial information.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\n/**\n * @static\n * @desc Creates an action that loads member's financial information.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\nvar getFinancesDone = function () {\n  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(handle, uuid, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee3$(_context3) {\n      while (1) {\n        switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return (0, _members.getService)(tokenV3).getMemberFinances(handle);\n\n          case 2:\n            data = _context3.sent;\n            return _context3.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 4:\n          case 'end':\n            return _context3.stop();\n        }\n      }\n    }, _callee3, this);\n  }));\n\n  return function getFinancesDone(_x5, _x6, _x7) {\n    return _ref3.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that signals beginning of member stats loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getStatsInit = function () {\n  var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee4$(_context4) {\n      while (1) {\n        switch (_context4.prev = _context4.next) {\n          case 0:\n            return _context4.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context4.stop();\n        }\n      }\n    }, _callee4, this);\n  }));\n\n  return function getStatsInit(_x8, _x9) {\n    return _ref4.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads member statistics.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar getStatsDone = function () {\n  var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(handle, uuid, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee5$(_context5) {\n      while (1) {\n        switch (_context5.prev = _context5.next) {\n          case 0:\n            _context5.next = 2;\n            return (0, _members.getService)(tokenV3).getStats(handle);\n\n          case 2:\n            data = _context5.sent;\n            return _context5.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 4:\n          case 'end':\n            return _context5.stop();\n        }\n      }\n    }, _callee5, this);\n  }));\n\n  return function getStatsDone(_x10, _x11, _x12) {\n    return _ref5.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Payload creator for the action that inits the loading of member active challenges.\n * @param {String} handle\n * @param {String} uuid\n * @returns {Object} Payload\n */\n\n\nvar getActiveChallengesInit = function () {\n  var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee6$(_context6) {\n      while (1) {\n        switch (_context6.prev = _context6.next) {\n          case 0:\n            return _context6.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context6.stop();\n        }\n      }\n    }, _callee6, this);\n  }));\n\n  return function getActiveChallengesInit(_x13, _x14) {\n    return _ref6.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Payload creator for the action that loads the member active challenges.\n * @param {String} handle\n * @param {String} uuid\n * @param {String} tokenV3\n * @returns {Object} Payload\n */\n\n\nvar getActiveChallengesDone = function () {\n  var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(handle, uuid, tokenV3) {\n    var filter, service, getAll, _decodeToken, userId, calls, _ref9, _ref10, challenges;\n\n    return _regenerator2.default.wrap(function _callee7$(_context7) {\n      while (1) {\n        switch (_context7.prev = _context7.next) {\n          case 0:\n            getAll = function getAll(getter) {\n              var page = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n              var prev = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n              var PAGE_SIZE = 50;\n              return getter({\n                limit: PAGE_SIZE,\n                offset: page * PAGE_SIZE\n              }).then(function (_ref8) {\n                var chunk = _ref8.challenges;\n\n                if (!chunk.length) return prev || [];\n                return getAll(getter, 1 + page, prev ? prev.concat(chunk) : chunk);\n              });\n            };\n\n            filter = { status: 'ACTIVE' };\n            service = (0, _challenges.getService)(tokenV3);\n            /* TODO: Reuse `getAll` from `actions/challenge-listing`\n            /* after it moved from `community-app` to here.\n             */\n\n            _decodeToken = (0, _tcAccounts.decodeToken)(tokenV3), userId = _decodeToken.userId;\n            calls = [getAll(function (params) {\n              return service.getUserChallenges(userId, handle, filter, params);\n            })];\n            _context7.next = 7;\n            return _promise2.default.all(calls);\n\n          case 7:\n            _ref9 = _context7.sent;\n            _ref10 = (0, _slicedToArray3.default)(_ref9, 1);\n            challenges = _ref10[0];\n            return _context7.abrupt('return', { handle: handle, challenges: challenges, uuid: uuid });\n\n          case 11:\n          case 'end':\n            return _context7.stop();\n        }\n      }\n    }, _callee7, this);\n  }));\n\n  return function getActiveChallengesDone(_x15, _x16, _x17) {\n    return _ref7.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of member stats distribution history.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getStatsHistoryInit = function () {\n  var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee8$(_context8) {\n      while (1) {\n        switch (_context8.prev = _context8.next) {\n          case 0:\n            return _context8.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context8.stop();\n        }\n      }\n    }, _callee8, this);\n  }));\n\n  return function getStatsHistoryInit(_x20, _x21) {\n    return _ref11.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member stats history.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar getStatsHistoryDone = function () {\n  var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(handle, uuid, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee9$(_context9) {\n      while (1) {\n        switch (_context9.prev = _context9.next) {\n          case 0:\n            _context9.next = 2;\n            return (0, _members.getService)(tokenV3).getStatsHistory(handle);\n\n          case 2:\n            data = _context9.sent;\n            return _context9.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 4:\n          case 'end':\n            return _context9.stop();\n        }\n      }\n    }, _callee9, this);\n  }));\n\n  return function getStatsHistoryDone(_x22, _x23, _x24) {\n    return _ref12.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of member stats distribution loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getStatsDistributionInit = function () {\n  var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee10$(_context10) {\n      while (1) {\n        switch (_context10.prev = _context10.next) {\n          case 0:\n            return _context10.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context10.stop();\n        }\n      }\n    }, _callee10, this);\n  }));\n\n  return function getStatsDistributionInit(_x25, _x26) {\n    return _ref13.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member stats distribution.\n * @param {String} handle Member handle.\n * @param {String} track Main track name.\n * @param {String} subTrack Subtrack name.\n * @param {String} uuid Operation UUID.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar getStatsDistributionDone = function () {\n  var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(handle, track, subTrack, uuid, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee11$(_context11) {\n      while (1) {\n        switch (_context11.prev = _context11.next) {\n          case 0:\n            _context11.next = 2;\n            return (0, _members.getService)(tokenV3).getStatsDistribution(handle, track, subTrack);\n\n          case 2:\n            data = _context11.sent;\n            return _context11.abrupt('return', { data: data, handle: handle, uuid: uuid });\n\n          case 4:\n          case 'end':\n            return _context11.stop();\n        }\n      }\n    }, _callee11, this);\n  }));\n\n  return function getStatsDistributionDone(_x27, _x28, _x29, _x30, _x31) {\n    return _ref14.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of subtrack challenges loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getSubtrackChallengesInit = function () {\n  var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee12$(_context12) {\n      while (1) {\n        switch (_context12.prev = _context12.next) {\n          case 0:\n            return _context12.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context12.stop();\n        }\n      }\n    }, _callee12, this);\n  }));\n\n  return function getSubtrackChallengesInit(_x32, _x33) {\n    return _ref15.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member subtrack challenges.\n * @param {String} uuid Operation UUID.\n * @param {String} handle Member handle.\n * @param {String} tokenV3 v3 auth token.\n * @param {String} track Main track name.\n * @param {String} subTrack Subtrack name.\n * @param {Number} start page.\n * @param {Number} page size.\n * @param {Boolean} whether to refresh.\n * @return {Action}\n */\n\n\nvar getSubtrackChallengesDone = function () {\n  var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(uuid, handle, tokenV3, track, subTrack, pageNum, pageSize, refresh) {\n    var filter, params, service, _decodeToken2, userId;\n\n    return _regenerator2.default.wrap(function _callee13$(_context13) {\n      while (1) {\n        switch (_context13.prev = _context13.next) {\n          case 0:\n            filter = {\n              status: 'completed',\n              hasUserSubmittedForReview: 'true',\n              track: track,\n              subTrack: subTrack\n            };\n            params = {};\n\n            params.orderBy = 'submissionEndDate desc';\n            params.limit = pageSize;\n            params.offset = pageNum * pageSize;\n\n            service = (0, _challenges.getService)(tokenV3);\n            _decodeToken2 = (0, _tcAccounts.decodeToken)(tokenV3), userId = _decodeToken2.userId;\n            return _context13.abrupt('return', service.getUserChallenges(userId, handle, filter, params).then(function (res) {\n              return {\n                uuid: uuid,\n                challenges: res.challenges,\n                refresh: refresh,\n                handle: handle\n              };\n            }));\n\n          case 8:\n          case 'end':\n            return _context13.stop();\n        }\n      }\n    }, _callee13, this);\n  }));\n\n  return function getSubtrackChallengesDone(_x34, _x35, _x36, _x37, _x38, _x39, _x40, _x41) {\n    return _ref16.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of member SRM loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getUserSRMInit = function () {\n  var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee14$(_context14) {\n      while (1) {\n        switch (_context14.prev = _context14.next) {\n          case 0:\n            return _context14.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context14.stop();\n        }\n      }\n    }, _callee14, this);\n  }));\n\n  return function getUserSRMInit(_x42, _x43) {\n    return _ref17.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member SRM.\n * @param {String} uuid Operation UUID.\n * @param {String} handle Member handle.\n * @param {String} tokenV3 v3 auth token.\n * @param {Number} start page.\n * @param {Number} page size.\n * @param {Boolean} whether to refresh.\n * @return {Action}\n */\n\n\nvar getUserSRMDone = function () {\n  var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(uuid, handle, tokenV3, pageNum, pageSize, refresh) {\n    var filter, params, service;\n    return _regenerator2.default.wrap(function _callee15$(_context15) {\n      while (1) {\n        switch (_context15.prev = _context15.next) {\n          case 0:\n            filter = {\n              status: 'past',\n              isRatedForSRM: 'true'\n            };\n            params = {\n              filter: _qs2.default.stringify(filter, { encode: false }),\n              limit: pageSize,\n              offset: pageNum * pageSize\n            };\n            service = (0, _challenges.getService)(tokenV3);\n            return _context15.abrupt('return', service.getUserSrms(handle, params).then(function (res) {\n              return {\n                uuid: uuid,\n                srms: res,\n                refresh: refresh,\n                handle: handle\n              };\n            }));\n\n          case 4:\n          case 'end':\n            return _context15.stop();\n        }\n      }\n    }, _callee15, this);\n  }));\n\n  return function getUserSRMDone(_x44, _x45, _x46, _x47, _x48, _x49) {\n    return _ref18.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that signals beginning of member marathon loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\n\n\nvar getUserMarathonInit = function () {\n  var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(handle, uuid) {\n    return _regenerator2.default.wrap(function _callee16$(_context16) {\n      while (1) {\n        switch (_context16.prev = _context16.next) {\n          case 0:\n            return _context16.abrupt('return', { handle: handle, uuid: uuid });\n\n          case 1:\n          case 'end':\n            return _context16.stop();\n        }\n      }\n    }, _callee16, this);\n  }));\n\n  return function getUserMarathonInit(_x50, _x51) {\n    return _ref19.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Create an action that loads the member marathon.\n * @param {String} uuid Operation UUID.\n * @param {String} handle Member handle.\n * @param {String} tokenV3 v3 auth token.\n * @param {Number} start page.\n * @param {Number} page size.\n * @param {Boolean} whether to refresh.\n * @return {Action}\n */\n\n\nvar getUserMarathonDone = function () {\n  var _ref20 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(uuid, handle, tokenV3, pageNum, pageSize, refresh) {\n    var filter, params, service;\n    return _regenerator2.default.wrap(function _callee17$(_context17) {\n      while (1) {\n        switch (_context17.prev = _context17.next) {\n          case 0:\n            filter = { status: 'PAST', isRatedForMM: 'true' };\n            params = {};\n\n            params.orderBy = 'endDate desc';\n            params.limit = pageSize;\n            params.offset = pageNum * pageSize;\n\n            service = (0, _challenges.getService)(tokenV3);\n            return _context17.abrupt('return', service.getUserMarathonMatches(handle, filter, params).then(function (res) {\n              return {\n                uuid: uuid,\n                marathons: res,\n                refresh: refresh,\n                handle: handle\n              };\n            }));\n\n          case 7:\n          case 'end':\n            return _context17.stop();\n        }\n      }\n    }, _callee17, this);\n  }));\n\n  return function getUserMarathonDone(_x52, _x53, _x54, _x55, _x56, _x57) {\n    return _ref20.apply(this, arguments);\n  };\n}();\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _members = __webpack_require__(/*! ../services/members */ \"./src/services/members.js\");\n\nvar _user = __webpack_require__(/*! ../services/user */ \"./src/services/user.js\");\n\nvar _challenges = __webpack_require__(/*! ../services/challenges */ \"./src/services/challenges.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.members\"\n       * @desc Actions related to members data.\n       */\n\n/**\n * @static\n * @desc Creates an action that drops all information related to the specfied\n *  member.\n * @param {String} handle Topcoder user handle.\n * @return {Action}\n */\nfunction drop(handle) {\n  return handle;\n}\n\n/**\n * @static\n * @desc Creates an action that drops all member information loaded by\n *  actions from this module.\n * @return {Action}\n */\nfunction dropAll() {}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of member achievements\n *  loading.\n * @param {String} handle Member handle.\n * @param {String} uuid Loading operation UUID.\n * @return {Action}\n */\nfunction getAchievementsInit(handle, uuid) {\n  return { handle: handle, uuid: uuid };\n}function getFinancesInit(handle, uuid) {\n  return { handle: handle, uuid: uuid };\n}\nvar _default = (0, _reduxActions.createActions)({\n  MEMBERS: {\n    DROP: drop,\n    DROP_ALL: dropAll,\n    GET_ACHIEVEMENTS_INIT: getAchievementsInit,\n    GET_ACHIEVEMENTS_DONE: getAchievementsDone,\n    GET_ACHIEVEMENTS_V3_DONE: getAchievementsV3Done,\n    GET_FINANCES_INIT: getFinancesInit,\n    GET_FINANCES_DONE: getFinancesDone,\n    GET_STATS_INIT: getStatsInit,\n    GET_STATS_DONE: getStatsDone,\n    GET_STATS_HISTORY_INIT: getStatsHistoryInit,\n    GET_STATS_HISTORY_DONE: getStatsHistoryDone,\n    GET_STATS_DISTRIBUTION_INIT: getStatsDistributionInit,\n    GET_STATS_DISTRIBUTION_DONE: getStatsDistributionDone,\n    GET_ACTIVE_CHALLENGES_INIT: getActiveChallengesInit,\n    GET_ACTIVE_CHALLENGES_DONE: getActiveChallengesDone,\n    GET_SUBTRACK_CHALLENGES_INIT: getSubtrackChallengesInit,\n    GET_SUBTRACK_CHALLENGES_DONE: getSubtrackChallengesDone,\n    GET_USER_SRM_INIT: getUserSRMInit,\n    GET_USER_SRM_DONE: getUserSRMDone,\n    GET_USER_MARATHON_INIT: getUserMarathonInit,\n    GET_USER_MARATHON_DONE: getUserMarathonDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(drop, 'drop', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(dropAll, 'dropAll', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getAchievementsInit, 'getAchievementsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getAchievementsDone, 'getAchievementsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getAchievementsV3Done, 'getAchievementsV3Done', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getFinancesInit, 'getFinancesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getFinancesDone, 'getFinancesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsInit, 'getStatsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsDone, 'getStatsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getActiveChallengesInit, 'getActiveChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getActiveChallengesDone, 'getActiveChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsHistoryInit, 'getStatsHistoryInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsHistoryDone, 'getStatsHistoryDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsDistributionInit, 'getStatsDistributionInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getStatsDistributionDone, 'getStatsDistributionDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getSubtrackChallengesInit, 'getSubtrackChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getSubtrackChallengesDone, 'getSubtrackChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getUserSRMInit, 'getUserSRMInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getUserSRMDone, 'getUserSRMDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getUserMarathonInit, 'getUserMarathonInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(getUserMarathonDone, 'getUserMarathonDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/members.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/members.js?");
 
 /***/ }),
 
@@ -544,7 +544,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _user = __webpack_require__(/*! ../services/user */ \"./src/services/user.js\");\n\nvar _members = __webpack_require__(/*! ../services/members */ \"./src/services/members.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.profile\"\n       * @desc Actions for interactions with profile details API.\n       * @todo Some of them repeat actions in {@link actions.members.md}. The code\n       *  should be refactored to avoid redundancy.\n       */\n\n\n/**\n * @static\n * @desc Creates and action that loads user profile.\n * @todo This action does not follow the pattern with init/done pairs of\n *  actions. Should be improved.\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction loadProfile(handle) {\n  return handle;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of user achievements loading.\n * @todo This duplicates similar action in {@link actions.members.md}!\n * @return {Action}\n */\nfunction getAchievementsInit() {}\n\n/**\n * @static\n * @desc Creates an action that loads user achievements from API v2.\n * @todo This duplicates similar action in {@link actions.members.md}!\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getAchievementsDone(handle) {\n  return (0, _user.getService)().getUserPublic(handle);\n}\n\n/**\n * @static\n * @desc Creates an action that loads user achievements from API v3.\n * @todo This duplicates similar action in {@link actions.members.md}!\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getAchievementsV3Done(handle) {\n  return (0, _user.getService)().getUserPublicV3(handle);\n}\n\n/**\n * @static\n * @todo To be documented.\n * @return {Action}\n */\nfunction getExternalAccountsInit() {}\n\n/**\n * @static\n * @todo To be documented.\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getExternalAccountsDone(handle) {\n  return (0, _members.getService)().getExternalAccounts(handle);\n}\n\n/**\n * @static\n * @todo Figure out what does this action do.\n * @return {Action}\n */\nfunction getExternalLinksInit() {}\n\n/**\n * @static\n * @todo Figure out the purpose of this action\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getExternalLinksDone(handle) {\n  return (0, _members.getService)().getExternalLinks(handle);\n}\n\n/**\n * @static\n * @todo Figure out the purpose of this action.\n * @return {Action}\n */\nfunction getInfoInit() {}\n\n/**\n * @static\n * @todo Figure out the purpose of this action.\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getInfoDone(handle) {\n  return (0, _members.getService)().getMemberInfo(handle);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading the member's\n *  skills info.\n * @return {Action}\n */\nfunction getSkillsInit() {}\n\n/**\n * @static\n * @desc Creates an action that loads member's skills info.\n * @param {String} handle Member handle.\n * @return {Action}\n */\nfunction getSkillsDone(handle) {\n  return (0, _members.getService)().getSkills(handle);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading member's stats.\n * @todo This is similar to {@link actions.members.md#module_actions.members.getStatsInit}!\n * @return {Action}\n */\nfunction getStatsInit() {}\n\n/**\n * @static\n * @desc Creates an action that loads member's stats.\n * @param {String} handle Member handle.\n * @return {Action}\n */\nfunction getStatsDone(handle) {\n  return (0, _members.getService)().getStats(handle);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting linked accounts.\n * @return {Action}\n */\nfunction getLinkedAccountsInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets linked accounts.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction getLinkedAccountsDone(profile, tokenV3) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.getLinkedAccounts(profile.userId);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting credential.\n * @return {Action}\n */\nfunction getCredentialInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets credential.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction getCredentialDone(profile, tokenV3) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.getCredential(profile.userId);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting email preferences.\n * @return {Action}\n */\nfunction getEmailPreferencesInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets email preferences.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction getEmailPreferencesDone(profile, tokenV3) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.getEmailPreferences(profile.userId);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of uploading user's photo.\n * @return {Action}\n */\nfunction uploadPhotoInit() {}\n\n/**\n * @static\n * @desc Creates an action that uploads user's photo.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} file The photo file.\n * @return {Action}\n */\nfunction uploadPhotoDone(handle, tokenV3, file) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.getPresignedUrl(handle, file).then(function (res) {\n    return service.uploadFileToS3(res);\n  }).then(function (res) {\n    return service.updateMemberPhoto(res);\n  }).then(function (photoURL) {\n    return { handle: handle, photoURL: photoURL };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of deleting user's photo.\n * @return {Action}\n */\nfunction deletePhotoInit() {}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of updating user's profile.\n * @return {Action}\n */\nfunction updateProfileInit() {}\n\n/**\n * @static\n * @desc Creates an action that updates user's profile.\n * @param {String} profile Topcoder user profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction updateProfileDone(profile, tokenV3) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.updateMemberProfile(profile);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of adding user's skill.\n * @return {Action}\n */\nfunction addSkillInit() {}\n\n/**\n * @static\n * @desc Creates an action that adds user's skill.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {Object} skill Skill to add.\n * @return {Action}\n */\nfunction addSkillDone(handle, tokenV3, skill) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.addSkill(handle, skill.tagId).then(function (res) {\n    return { skills: res.skills, handle: handle, skill: skill };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of hiding user's skill.\n * @return {Action}\n */\nfunction hideSkillInit() {}\n\n/**\n * @static\n * @desc Creates an action that hides user's skill.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {Object} skill Skill to hide.\n * @return {Action}\n */\nfunction hideSkillDone(handle, tokenV3, skill) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.hideSkill(handle, skill.tagId).then(function (res) {\n    return { skills: res.skills, handle: handle, skill: skill };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of adding user's web link.\n * @return {Action}\n */\nfunction addWebLinkInit() {}\n\n/**\n * @static\n * @desc Creates an action that adds user's web link.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} webLink Web link to add.\n * @return {Action}\n */\nfunction addWebLinkDone(handle, tokenV3, webLink) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.addWebLink(handle, webLink).then(function (res) {\n    return { data: res, handle: handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of deleting user's web link.\n * @param {Object} key Web link key to delete.\n * @return {Action}\n */\nfunction deleteWebLinkInit(_ref) {\n  var key = _ref.key;\n\n  return { key: key };\n}\n\n/**\n * @static\n * @desc Creates an action that deletes user's web link.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} webLink Web link to delete.\n * @return {Action}\n */\nfunction deleteWebLinkDone(handle, tokenV3, webLink) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.deleteWebLink(handle, webLink.key).then(function (res) {\n    return { data: res, handle: handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of linking external account.\n * @return {Action}\n */\nfunction linkExternalAccountInit() {}\n\n/**\n * @static\n * @desc Creates an action that links external account.\n * @param {Object} profile Topcoder member handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} providerType The external account service provider\n * @param {String} callbackUrl Optional. The callback url\n * @return {Action}\n */\nfunction linkExternalAccountDone(profile, tokenV3, providerType, callbackUrl) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.linkExternalAccount(profile.userId, providerType, callbackUrl).then(function (res) {\n    return { data: res, handle: profile.handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of unlinking external account.\n * @param {Object} providerType External account provider type to delete.\n * @return {Action}\n */\nfunction unlinkExternalAccountInit(_ref2) {\n  var providerType = _ref2.providerType;\n\n  return { providerType: providerType };\n}\n\n/**\n * @static\n * @desc Creates an action that unlinks external account.\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} providerType The external account service provider\n * @return {Action}\n */\nfunction unlinkExternalAccountDone(profile, tokenV3, providerType) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.unlinkExternalAccount(profile.userId, providerType).then(function () {\n    return { providerType: providerType, handle: profile.handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of saving email preferences.\n * @return {Action}\n */\nfunction saveEmailPreferencesInit() {}\n\n/**\n * @static\n * @desc Creates an action that saves email preferences.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {Object} preferences The email preferences\n * @return {Action}\n */\nfunction saveEmailPreferencesDone(profile, tokenV3, preferences) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.saveEmailPreferences(profile, preferences).then(function (res) {\n    return { data: res, handle: profile.handle, preferences: preferences };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of updating user password.\n * @return {Action}\n */\nfunction updatePasswordInit() {}\n\n/**\n * @static\n * @desc Creates an action that updates user password.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} newPassword The new password\n * @param {String} oldPassword The old password\n * @return {Action}\n */\nfunction updatePasswordDone(profile, tokenV3, newPassword, oldPassword) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.updatePassword(profile.userId, newPassword, oldPassword).then(function (res) {\n    return { data: res, handle: profile.handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of verify member new email.\n * @return {Action}\n */\nfunction verifyMemberNewEmailInit() {}\n\n/**\n * @static\n * @desc Creates an action that verify member new email.\n *\n * @param {Object} handle Topcoder member handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} emailVerifyToken The verify token of new email.\n * @return {Action}\n */\nfunction verifyMemberNewEmailDone(handle, tokenV3, emailVerifyToken) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.verifyMemberNewEmail(handle, emailVerifyToken).then(function (res) {\n    return { data: res };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that toggles isEmailConflict state\n * @param {boolean} state\n * @return {Action}\n */\nfunction updateEmailConflict() {\n  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n  return state;\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  PROFILE: {\n    LOAD_PROFILE: loadProfile,\n    CLEAR_PROFILE: _lodash2.default.noop,\n    GET_ACHIEVEMENTS_INIT: getAchievementsInit,\n    GET_ACHIEVEMENTS_DONE: getAchievementsDone,\n    GET_ACHIEVEMENTS_V3_DONE: getAchievementsV3Done,\n    GET_EXTERNAL_ACCOUNTS_INIT: getExternalAccountsInit,\n    GET_EXTERNAL_ACCOUNTS_DONE: getExternalAccountsDone,\n    GET_EXTERNAL_LINKS_INIT: getExternalLinksInit,\n    GET_EXTERNAL_LINKS_DONE: getExternalLinksDone,\n    GET_INFO_INIT: getInfoInit,\n    GET_INFO_DONE: getInfoDone,\n    GET_SKILLS_INIT: getSkillsInit,\n    GET_SKILLS_DONE: getSkillsDone,\n    GET_STATS_INIT: getStatsInit,\n    GET_STATS_DONE: getStatsDone,\n    GET_LINKED_ACCOUNTS_INIT: getLinkedAccountsInit,\n    GET_LINKED_ACCOUNTS_DONE: getLinkedAccountsDone,\n    GET_EMAIL_PREFERENCES_INIT: getEmailPreferencesInit,\n    GET_EMAIL_PREFERENCES_DONE: getEmailPreferencesDone,\n    GET_CREDENTIAL_INIT: getCredentialInit,\n    GET_CREDENTIAL_DONE: getCredentialDone,\n    UPLOAD_PHOTO_INIT: uploadPhotoInit,\n    UPLOAD_PHOTO_DONE: uploadPhotoDone,\n    DELETE_PHOTO_INIT: deletePhotoInit,\n    DELETE_PHOTO_DONE: updateProfileDone,\n    UPDATE_PROFILE_INIT: updateProfileInit,\n    UPDATE_PROFILE_DONE: updateProfileDone,\n    ADD_SKILL_INIT: addSkillInit,\n    ADD_SKILL_DONE: addSkillDone,\n    HIDE_SKILL_INIT: hideSkillInit,\n    HIDE_SKILL_DONE: hideSkillDone,\n    ADD_WEB_LINK_INIT: addWebLinkInit,\n    ADD_WEB_LINK_DONE: addWebLinkDone,\n    DELETE_WEB_LINK_INIT: deleteWebLinkInit,\n    DELETE_WEB_LINK_DONE: deleteWebLinkDone,\n    LINK_EXTERNAL_ACCOUNT_INIT: linkExternalAccountInit,\n    LINK_EXTERNAL_ACCOUNT_DONE: linkExternalAccountDone,\n    UNLINK_EXTERNAL_ACCOUNT_INIT: unlinkExternalAccountInit,\n    UNLINK_EXTERNAL_ACCOUNT_DONE: unlinkExternalAccountDone,\n    SAVE_EMAIL_PREFERENCES_INIT: saveEmailPreferencesInit,\n    SAVE_EMAIL_PREFERENCES_DONE: saveEmailPreferencesDone,\n    UPDATE_PASSWORD_INIT: updatePasswordInit,\n    UPDATE_PASSWORD_DONE: updatePasswordDone,\n    VERIFY_MEMBER_NEW_EMAIL_INIT: verifyMemberNewEmailInit,\n    VERIFY_MEMBER_NEW_EMAIL_DONE: verifyMemberNewEmailDone,\n    UPDATE_EMAIL_CONFLICT: updateEmailConflict\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(loadProfile, 'loadProfile', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getAchievementsInit, 'getAchievementsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getAchievementsDone, 'getAchievementsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getAchievementsV3Done, 'getAchievementsV3Done', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getExternalAccountsInit, 'getExternalAccountsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getExternalAccountsDone, 'getExternalAccountsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getExternalLinksInit, 'getExternalLinksInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getExternalLinksDone, 'getExternalLinksDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getInfoInit, 'getInfoInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getInfoDone, 'getInfoDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getSkillsInit, 'getSkillsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getSkillsDone, 'getSkillsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getStatsInit, 'getStatsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getStatsDone, 'getStatsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getLinkedAccountsInit, 'getLinkedAccountsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getLinkedAccountsDone, 'getLinkedAccountsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getCredentialInit, 'getCredentialInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getCredentialDone, 'getCredentialDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getEmailPreferencesInit, 'getEmailPreferencesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getEmailPreferencesDone, 'getEmailPreferencesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(uploadPhotoInit, 'uploadPhotoInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(uploadPhotoDone, 'uploadPhotoDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(deletePhotoInit, 'deletePhotoInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updateProfileInit, 'updateProfileInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updateProfileDone, 'updateProfileDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(addSkillInit, 'addSkillInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(addSkillDone, 'addSkillDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(hideSkillInit, 'hideSkillInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(hideSkillDone, 'hideSkillDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(addWebLinkInit, 'addWebLinkInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(addWebLinkDone, 'addWebLinkDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(deleteWebLinkInit, 'deleteWebLinkInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(deleteWebLinkDone, 'deleteWebLinkDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(linkExternalAccountInit, 'linkExternalAccountInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(linkExternalAccountDone, 'linkExternalAccountDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(unlinkExternalAccountInit, 'unlinkExternalAccountInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(unlinkExternalAccountDone, 'unlinkExternalAccountDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(saveEmailPreferencesInit, 'saveEmailPreferencesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(saveEmailPreferencesDone, 'saveEmailPreferencesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updatePasswordInit, 'updatePasswordInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updatePasswordDone, 'updatePasswordDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(verifyMemberNewEmailInit, 'verifyMemberNewEmailInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(verifyMemberNewEmailDone, 'verifyMemberNewEmailDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updateEmailConflict, 'updateEmailConflict', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/profile.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/profile.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _user = __webpack_require__(/*! ../services/user */ \"./src/services/user.js\");\n\nvar _members = __webpack_require__(/*! ../services/members */ \"./src/services/members.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.profile\"\n       * @desc Actions for interactions with profile details API.\n       * @todo Some of them repeat actions in {@link actions.members.md}. The code\n       *  should be refactored to avoid redundancy.\n       */\n\n\n/**\n * @static\n * @desc Creates and action that loads user profile.\n * @todo This action does not follow the pattern with init/done pairs of\n *  actions. Should be improved.\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction loadProfile(handle) {\n  return handle;\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of user achievements loading.\n * @todo This duplicates similar action in {@link actions.members.md}!\n * @return {Action}\n */\nfunction getAchievementsInit() {}\n\n/**\n * @static\n * @desc Creates an action that loads user achievements from API v2.\n * @todo This duplicates similar action in {@link actions.members.md}!\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getAchievementsDone(handle) {\n  return (0, _user.getService)().getUserPublic(handle);\n}\n\n/**\n * @static\n * @desc Creates an action that loads user achievements from API v3.\n * @todo This duplicates similar action in {@link actions.members.md}!\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getAchievementsV3Done(handle) {\n  return (0, _user.getService)().getUserPublicV3(handle);\n}\n\n/**\n * @static\n * @todo To be documented.\n * @return {Action}\n */\nfunction getExternalAccountsInit() {}\n\n/**\n * @static\n * @todo To be documented.\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getExternalAccountsDone(handle) {\n  return (0, _members.getService)().getExternalAccounts(handle);\n}\n\n/**\n * @static\n * @todo Figure out what does this action do.\n * @return {Action}\n */\nfunction getExternalLinksInit() {}\n\n/**\n * @static\n * @todo Figure out the purpose of this action\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getExternalLinksDone(handle) {\n  return (0, _members.getService)().getExternalLinks(handle);\n}\n\n/**\n * @static\n * @todo Figure out the purpose of this action.\n * @return {Action}\n */\nfunction getInfoInit() {}\n\n/**\n * @static\n * @todo Figure out the purpose of this action.\n * @param {String} handle User handle.\n * @return {Action}\n */\nfunction getInfoDone(handle) {\n  return (0, _members.getService)().getMemberInfo(handle);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading the member's\n *  skills info.\n * @return {Action}\n */\nfunction getSkillsInit() {}\n\n/**\n * @static\n * @desc Creates an action that loads member's skills info.\n * @param {String} handle Member handle.\n * @return {Action}\n */\nfunction getSkillsDone(handle) {\n  return (0, _members.getService)().getSkills(handle);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading member's stats.\n * @todo This is similar to {@link actions.members.md#module_actions.members.getStatsInit}!\n * @return {Action}\n */\nfunction getStatsInit() {}\n\n/**\n * @static\n * @desc Creates an action that loads member's stats.\n * @param {String} handle Member handle.\n * @return {Action}\n */\nfunction getStatsDone(handle) {\n  return (0, _members.getService)().getStats(handle);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting linked accounts.\n * @return {Action}\n */\nfunction getLinkedAccountsInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets linked accounts.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction getLinkedAccountsDone(profile, tokenV3) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.getLinkedAccounts(profile.userId);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting credential.\n * @return {Action}\n */\nfunction getCredentialInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets credential.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction getCredentialDone(profile, tokenV3) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.getCredential(profile.userId);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting email preferences.\n * @return {Action}\n */\nfunction getEmailPreferencesInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets email preferences.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction getEmailPreferencesDone(profile, tokenV3) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.getEmailPreferences(profile.userId);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of uploading user's photo.\n * @return {Action}\n */\nfunction uploadPhotoInit() {}\n\n/**\n * @static\n * @desc Creates an action that uploads user's photo.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} file The photo file.\n * @return {Action}\n */\nfunction uploadPhotoDone(handle, tokenV3, file) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.getPresignedUrl(handle, file).then(function (res) {\n    return service.uploadFileToS3(res);\n  }).then(function (res) {\n    return service.updateMemberPhoto(res);\n  }).then(function (photoURL) {\n    return { handle: handle, photoURL: photoURL };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of deleting user's photo.\n * @return {Action}\n */\nfunction deletePhotoInit() {}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of updating user's profile.\n * @return {Action}\n */\nfunction updateProfileInit() {}\n\n/**\n * @static\n * @desc Creates an action that updates user's profile.\n * @param {String} profile Topcoder user profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Action}\n */\nfunction updateProfileDone(profile, tokenV3) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.updateMemberProfile(profile);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of adding user's skill.\n * @return {Action}\n */\nfunction addSkillInit() {}\n\n/**\n * @static\n * @desc Creates an action that adds user's skill.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {Object} skill Skill to add.\n * @return {Action}\n */\nfunction addSkillDone(handle, tokenV3, skill) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.addSkill(handle, skill.tagId).then(function (res) {\n    return { skills: res.skills, handle: handle, skill: skill };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of hiding user's skill.\n * @return {Action}\n */\nfunction hideSkillInit() {}\n\n/**\n * @static\n * @desc Creates an action that hides user's skill.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {Object} skill Skill to hide.\n * @return {Action}\n */\nfunction hideSkillDone(handle, tokenV3, skill) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.hideSkill(handle, skill.tagId).then(function (res) {\n    return { skills: res.skills, handle: handle, skill: skill };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of adding user's web link.\n * @return {Action}\n */\nfunction addWebLinkInit() {}\n\n/**\n * @static\n * @desc Creates an action that adds user's web link.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} webLink Web link to add.\n * @return {Action}\n */\nfunction addWebLinkDone(handle, tokenV3, webLink) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.addWebLink(handle, webLink).then(function (res) {\n    return { data: res, handle: handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of deleting user's web link.\n * @param {Object} key Web link key to delete.\n * @return {Action}\n */\nfunction deleteWebLinkInit(_ref) {\n  var key = _ref.key;\n\n  return { key: key };\n}\n\n/**\n * @static\n * @desc Creates an action that deletes user's web link.\n * @param {String} handle Topcoder user handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} webLink Web link to delete.\n * @return {Action}\n */\nfunction deleteWebLinkDone(handle, tokenV3, webLink) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.deleteWebLink(handle, webLink.key).then(function (res) {\n    return { data: res, handle: handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of linking external account.\n * @return {Action}\n */\nfunction linkExternalAccountInit() {}\n\n/**\n * @static\n * @desc Creates an action that links external account.\n * @param {Object} profile Topcoder member handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} providerType The external account service provider\n * @param {String} callbackUrl Optional. The callback url\n * @return {Action}\n */\nfunction linkExternalAccountDone(profile, tokenV3, providerType, callbackUrl) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.linkExternalAccount(profile.userId, providerType, callbackUrl).then(function (res) {\n    return { data: res, handle: profile.handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of unlinking external account.\n * @param {Object} providerType External account provider type to delete.\n * @return {Action}\n */\nfunction unlinkExternalAccountInit(_ref2) {\n  var providerType = _ref2.providerType;\n\n  return { providerType: providerType };\n}\n\n/**\n * @static\n * @desc Creates an action that unlinks external account.\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} providerType The external account service provider\n * @return {Action}\n */\nfunction unlinkExternalAccountDone(profile, tokenV3, providerType) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.unlinkExternalAccount(profile.userId, providerType).then(function () {\n    return { providerType: providerType, handle: profile.handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of saving email preferences.\n * @return {Action}\n */\nfunction saveEmailPreferencesInit() {}\n\n/**\n * @static\n * @desc Creates an action that saves email preferences.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {Object} preferences The email preferences\n * @return {Action}\n */\nfunction saveEmailPreferencesDone(profile, tokenV3, preferences) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.saveEmailPreferences(profile, preferences).then(function (res) {\n    return { data: res, handle: profile.handle, preferences: preferences };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of updating user password.\n * @return {Action}\n */\nfunction updatePasswordInit() {}\n\n/**\n * @static\n * @desc Creates an action that updates user password.\n *\n * @param {Object} profile Topcoder member profile.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} newPassword The new password\n * @param {String} oldPassword The old password\n * @return {Action}\n */\nfunction updatePasswordDone(profile, tokenV3, newPassword, oldPassword) {\n  var service = (0, _user.getService)(tokenV3);\n  return service.updatePassword(profile.userId, newPassword, oldPassword).then(function (res) {\n    return { data: res, handle: profile.handle };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of verify member new email.\n * @return {Action}\n */\nfunction verifyMemberNewEmailInit() {}\n\n/**\n * @static\n * @desc Creates an action that verify member new email.\n *\n * @param {Object} handle Topcoder member handle.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @param {String} emailVerifyToken The verify token of new email.\n * @return {Action}\n */\nfunction verifyMemberNewEmailDone(handle, tokenV3, emailVerifyToken) {\n  var service = (0, _members.getService)(tokenV3);\n  return service.verifyMemberNewEmail(handle, emailVerifyToken).then(function (res) {\n    return { data: res };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that toggles isEmailConflict state\n * @param {boolean} state\n * @return {Action}\n */\nfunction updateEmailConflict() {\n  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n  return state;\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  PROFILE: {\n    LOAD_PROFILE: loadProfile,\n    CLEAR_PROFILE: _lodash2.default.noop,\n    GET_ACHIEVEMENTS_INIT: getAchievementsInit,\n    GET_ACHIEVEMENTS_DONE: getAchievementsDone,\n    GET_ACHIEVEMENTS_V3_DONE: getAchievementsV3Done,\n    GET_EXTERNAL_ACCOUNTS_INIT: getExternalAccountsInit,\n    GET_EXTERNAL_ACCOUNTS_DONE: getExternalAccountsDone,\n    GET_EXTERNAL_LINKS_INIT: getExternalLinksInit,\n    GET_EXTERNAL_LINKS_DONE: getExternalLinksDone,\n    GET_INFO_INIT: getInfoInit,\n    GET_INFO_DONE: getInfoDone,\n    GET_SKILLS_INIT: getSkillsInit,\n    GET_SKILLS_DONE: getSkillsDone,\n    GET_STATS_INIT: getStatsInit,\n    GET_STATS_DONE: getStatsDone,\n    GET_LINKED_ACCOUNTS_INIT: getLinkedAccountsInit,\n    GET_LINKED_ACCOUNTS_DONE: getLinkedAccountsDone,\n    GET_EMAIL_PREFERENCES_INIT: getEmailPreferencesInit,\n    GET_EMAIL_PREFERENCES_DONE: getEmailPreferencesDone,\n    GET_CREDENTIAL_INIT: getCredentialInit,\n    GET_CREDENTIAL_DONE: getCredentialDone,\n    UPLOAD_PHOTO_INIT: uploadPhotoInit,\n    UPLOAD_PHOTO_DONE: uploadPhotoDone,\n    DELETE_PHOTO_INIT: deletePhotoInit,\n    DELETE_PHOTO_DONE: updateProfileDone,\n    UPDATE_PROFILE_INIT: updateProfileInit,\n    UPDATE_PROFILE_DONE: updateProfileDone,\n    ADD_SKILL_INIT: addSkillInit,\n    ADD_SKILL_DONE: addSkillDone,\n    HIDE_SKILL_INIT: hideSkillInit,\n    HIDE_SKILL_DONE: hideSkillDone,\n    ADD_WEB_LINK_INIT: addWebLinkInit,\n    ADD_WEB_LINK_DONE: addWebLinkDone,\n    DELETE_WEB_LINK_INIT: deleteWebLinkInit,\n    DELETE_WEB_LINK_DONE: deleteWebLinkDone,\n    LINK_EXTERNAL_ACCOUNT_INIT: linkExternalAccountInit,\n    LINK_EXTERNAL_ACCOUNT_DONE: linkExternalAccountDone,\n    UNLINK_EXTERNAL_ACCOUNT_INIT: unlinkExternalAccountInit,\n    UNLINK_EXTERNAL_ACCOUNT_DONE: unlinkExternalAccountDone,\n    SAVE_EMAIL_PREFERENCES_INIT: saveEmailPreferencesInit,\n    SAVE_EMAIL_PREFERENCES_DONE: saveEmailPreferencesDone,\n    UPDATE_PASSWORD_INIT: updatePasswordInit,\n    UPDATE_PASSWORD_DONE: updatePasswordDone,\n    VERIFY_MEMBER_NEW_EMAIL_INIT: verifyMemberNewEmailInit,\n    VERIFY_MEMBER_NEW_EMAIL_DONE: verifyMemberNewEmailDone,\n    UPDATE_EMAIL_CONFLICT: updateEmailConflict\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(loadProfile, 'loadProfile', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getAchievementsInit, 'getAchievementsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getAchievementsDone, 'getAchievementsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getAchievementsV3Done, 'getAchievementsV3Done', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getExternalAccountsInit, 'getExternalAccountsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getExternalAccountsDone, 'getExternalAccountsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getExternalLinksInit, 'getExternalLinksInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getExternalLinksDone, 'getExternalLinksDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getInfoInit, 'getInfoInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getInfoDone, 'getInfoDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getSkillsInit, 'getSkillsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getSkillsDone, 'getSkillsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getStatsInit, 'getStatsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getStatsDone, 'getStatsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getLinkedAccountsInit, 'getLinkedAccountsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getLinkedAccountsDone, 'getLinkedAccountsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getCredentialInit, 'getCredentialInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getCredentialDone, 'getCredentialDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getEmailPreferencesInit, 'getEmailPreferencesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(getEmailPreferencesDone, 'getEmailPreferencesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(uploadPhotoInit, 'uploadPhotoInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(uploadPhotoDone, 'uploadPhotoDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(deletePhotoInit, 'deletePhotoInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updateProfileInit, 'updateProfileInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updateProfileDone, 'updateProfileDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(addSkillInit, 'addSkillInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(addSkillDone, 'addSkillDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(hideSkillInit, 'hideSkillInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(hideSkillDone, 'hideSkillDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(addWebLinkInit, 'addWebLinkInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(addWebLinkDone, 'addWebLinkDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(deleteWebLinkInit, 'deleteWebLinkInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(deleteWebLinkDone, 'deleteWebLinkDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(linkExternalAccountInit, 'linkExternalAccountInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(linkExternalAccountDone, 'linkExternalAccountDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(unlinkExternalAccountInit, 'unlinkExternalAccountInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(unlinkExternalAccountDone, 'unlinkExternalAccountDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(saveEmailPreferencesInit, 'saveEmailPreferencesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(saveEmailPreferencesDone, 'saveEmailPreferencesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updatePasswordInit, 'updatePasswordInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updatePasswordDone, 'updatePasswordDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(verifyMemberNewEmailInit, 'verifyMemberNewEmailInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(verifyMemberNewEmailDone, 'verifyMemberNewEmailDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(updateEmailConflict, 'updateEmailConflict', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/profile.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/profile.js?");
 
 /***/ }),
 
@@ -556,7 +556,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _reviewOpportunities = __webpack_require__(/*! ../services/reviewOpportunities */ \"./src/services/reviewOpportunities.js\");\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.reviewOpportunity\"\n       * @desc Actions for review opportunity details API.\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of review application\n *  cancelation.\n * @return {Action}\n */\nfunction cancelApplicationsInit() {}\n\n/**\n * @static\n * @desc Creates an action that cancels existing applications\n * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n * @param {Array} roleIds Array of roleId Numbers to cancel applications for\n * @param {String} tokenV3 Required. Topcoder auth token v3.\n * @return {Action}\n */\nfunction cancelApplicationsDone(challengeId, roleIds, tokenV3) {\n  return (0, _reviewOpportunities.getReviewOpportunitiesService)(tokenV3).cancelApplications(challengeId, roleIds);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading the review\n *  opportunity details.\n * @return {Action}\n */\nfunction getDetailsInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets details of a review opportunity for\n *  the specified challenge.\n * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n * @param {String} tokenV3=null Optional. Topcoder auth token v3.\n * @default test\n * @return {Action}\n */\nfunction getDetailsDone(challengeId, tokenV3) {\n  return (0, _reviewOpportunities.getReviewOpportunitiesService)(tokenV3).getDetails(challengeId).catch(function (error) {\n    if (error.status !== 401) {\n      (0, _errors.fireErrorMessage)('Error Getting Review Opportunity Details', error.content || error);\n    }\n    return _promise2.default.reject(error.status);\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of review application process.\n * @return {Action}\n */\nfunction submitAppliationInit() {}\n\n/**\n * @static\n * @desc Creates an action that submits application for a review opportunity.\n * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n * @param {Array} roleIds Array of roleId Numbers to cancel applications for\n * @param {String} tokenV3 Required. Topcoder auth token v3.\n * @return {Action}\n */\nfunction submitApplicationsDone(challengeId, roleIds, tokenV3) {\n  return (0, _reviewOpportunities.getReviewOpportunitiesService)(tokenV3).submitApplications(challengeId, roleIds);\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  REVIEW_OPPORTUNITY: {\n    CANCEL_APPLICATIONS_INIT: cancelApplicationsInit,\n    CANCEL_APPLICATIONS_DONE: cancelApplicationsDone,\n    GET_DETAILS_INIT: getDetailsInit,\n    GET_DETAILS_DONE: getDetailsDone,\n    SUBMIT_APPLICATIONS_INIT: submitAppliationInit,\n    SUBMIT_APPLICATIONS_DONE: submitApplicationsDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(cancelApplicationsInit, 'cancelApplicationsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(cancelApplicationsDone, 'cancelApplicationsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(getDetailsInit, 'getDetailsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(getDetailsDone, 'getDetailsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(submitAppliationInit, 'submitAppliationInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(submitApplicationsDone, 'submitApplicationsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/reviewOpportunity.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _reviewOpportunities = __webpack_require__(/*! ../services/reviewOpportunities */ \"./src/services/reviewOpportunities.js\");\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.reviewOpportunity\"\n       * @desc Actions for review opportunity details API.\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of review application\n *  cancelation.\n * @return {Action}\n */\nfunction cancelApplicationsInit() {}\n\n/**\n * @static\n * @desc Creates an action that cancels existing applications\n * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n * @param {Array} roleIds Array of roleId Numbers to cancel applications for\n * @param {String} tokenV3 Required. Topcoder auth token v3.\n * @return {Action}\n */\nfunction cancelApplicationsDone(challengeId, roleIds, tokenV3) {\n  return (0, _reviewOpportunities.getReviewOpportunitiesService)(tokenV3).cancelApplications(challengeId, roleIds);\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of loading the review\n *  opportunity details.\n * @return {Action}\n */\nfunction getDetailsInit() {}\n\n/**\n * @static\n * @desc Creates an action that gets details of a review opportunity for\n *  the specified challenge.\n * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n * @param {String} tokenV3=null Optional. Topcoder auth token v3.\n * @default test\n * @return {Action}\n */\nfunction getDetailsDone(challengeId, tokenV3) {\n  return (0, _reviewOpportunities.getReviewOpportunitiesService)(tokenV3).getDetails(challengeId).catch(function (error) {\n    if (error.status !== 401) {\n      (0, _errors.fireErrorMessage)('Error Getting Review Opportunity Details', error.content || error);\n    }\n    return _promise2.default.reject(error.status);\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of review application process.\n * @return {Action}\n */\nfunction submitAppliationInit() {}\n\n/**\n * @static\n * @desc Creates an action that submits application for a review opportunity.\n * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n * @param {Array} roleIds Array of roleId Numbers to cancel applications for\n * @param {String} tokenV3 Required. Topcoder auth token v3.\n * @return {Action}\n */\nfunction submitApplicationsDone(challengeId, roleIds, tokenV3) {\n  return (0, _reviewOpportunities.getReviewOpportunitiesService)(tokenV3).submitApplications(challengeId, roleIds);\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  REVIEW_OPPORTUNITY: {\n    CANCEL_APPLICATIONS_INIT: cancelApplicationsInit,\n    CANCEL_APPLICATIONS_DONE: cancelApplicationsDone,\n    GET_DETAILS_INIT: getDetailsInit,\n    GET_DETAILS_DONE: getDetailsDone,\n    SUBMIT_APPLICATIONS_INIT: submitAppliationInit,\n    SUBMIT_APPLICATIONS_DONE: submitApplicationsDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(cancelApplicationsInit, 'cancelApplicationsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(cancelApplicationsDone, 'cancelApplicationsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(getDetailsInit, 'getDetailsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(getDetailsDone, 'getDetailsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(submitAppliationInit, 'submitAppliationInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(submitApplicationsDone, 'submitApplicationsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/reviewOpportunity.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/reviewOpportunity.js?");
 
 /***/ }),
 
@@ -568,7 +568,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Creates an action that loads user's all traits.\n * @param {String} handle the topcoder member handle\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\nvar getAllUserTraits = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(handle, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return (0, _userTraits.getService)(tokenV3).getAllUserTraits(handle);\n\n          case 2:\n            data = _context.sent;\n            return _context.abrupt('return', { data: data, handle: handle });\n\n          case 4:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function getAllUserTraits(_x, _x2) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that  add trait by trait id.\n * @param {String} handle member's handle.\n * @param {String} traitId trait id.\n * @param {Array} data trait data array.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar addUserTrait = function () {\n  var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(handle, traitId, data, tokenV3) {\n    var result;\n    return _regenerator2.default.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return (0, _userTraits.getService)(tokenV3).addUserTrait(handle, traitId, data);\n\n          case 2:\n            result = _context2.sent;\n            return _context2.abrupt('return', { result: result, handle: handle, traitId: traitId });\n\n          case 4:\n          case 'end':\n            return _context2.stop();\n        }\n      }\n    }, _callee2, this);\n  }));\n\n  return function addUserTrait(_x3, _x4, _x5, _x6) {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that update trait by trait id.\n * @param {String} handle member's handle.\n * @param {String} traitId trait id.\n * @param {Array} data trait data array.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar updateUserTrait = function () {\n  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(handle, traitId, data, tokenV3) {\n    var result;\n    return _regenerator2.default.wrap(function _callee3$(_context3) {\n      while (1) {\n        switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return (0, _userTraits.getService)(tokenV3).updateUserTrait(handle, traitId, data);\n\n          case 2:\n            result = _context3.sent;\n            return _context3.abrupt('return', { result: result, handle: handle, traitId: traitId });\n\n          case 4:\n          case 'end':\n            return _context3.stop();\n        }\n      }\n    }, _callee3, this);\n  }));\n\n  return function updateUserTrait(_x7, _x8, _x9, _x10) {\n    return _ref3.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that delete trait by trait id.\n * @param {String} handle member's handle.\n * @param {String} traitId trait id.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar deleteUserTrait = function () {\n  var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(handle, traitId, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee4$(_context4) {\n      while (1) {\n        switch (_context4.prev = _context4.next) {\n          case 0:\n            _context4.next = 2;\n            return (0, _userTraits.getService)(tokenV3).deleteUserTrait(handle, traitId);\n\n          case 2:\n            data = _context4.sent;\n            return _context4.abrupt('return', { data: data, handle: handle, traitId: traitId });\n\n          case 4:\n          case 'end':\n            return _context4.stop();\n        }\n      }\n    }, _callee4, this);\n  }));\n\n  return function deleteUserTrait(_x11, _x12, _x13) {\n    return _ref4.apply(this, arguments);\n  };\n}();\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _userTraits = __webpack_require__(/*! ../services/user-traits */ \"./src/services/user-traits.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.settings\"\n       * @desc Actions related to settings page.\n       */\n\nvar _default = (0, _reduxActions.createActions)({\n  SETTINGS: {\n    GET_ALL_USER_TRAITS: getAllUserTraits,\n    ADD_USER_TRAIT: addUserTrait,\n    DELETE_USER_TRAIT: deleteUserTrait,\n    UPDATE_USER_TRAIT: updateUserTrait,\n    MODIFY_USER_TRAIT_INIT: _lodash2.default.noop\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getAllUserTraits, 'getAllUserTraits', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/settings.js');\n  reactHotLoader.register(addUserTrait, 'addUserTrait', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/settings.js');\n  reactHotLoader.register(updateUserTrait, 'updateUserTrait', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/settings.js');\n  reactHotLoader.register(deleteUserTrait, 'deleteUserTrait', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/settings.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/settings.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/settings.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Creates an action that loads user's all traits.\n * @param {String} handle the topcoder member handle\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\nvar getAllUserTraits = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(handle, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            _context.next = 2;\n            return (0, _userTraits.getService)(tokenV3).getAllUserTraits(handle);\n\n          case 2:\n            data = _context.sent;\n            return _context.abrupt('return', { data: data, handle: handle });\n\n          case 4:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function getAllUserTraits(_x, _x2) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that  add trait by trait id.\n * @param {String} handle member's handle.\n * @param {String} traitId trait id.\n * @param {Array} data trait data array.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar addUserTrait = function () {\n  var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(handle, traitId, data, tokenV3) {\n    var result;\n    return _regenerator2.default.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return (0, _userTraits.getService)(tokenV3).addUserTrait(handle, traitId, data);\n\n          case 2:\n            result = _context2.sent;\n            return _context2.abrupt('return', { result: result, handle: handle, traitId: traitId });\n\n          case 4:\n          case 'end':\n            return _context2.stop();\n        }\n      }\n    }, _callee2, this);\n  }));\n\n  return function addUserTrait(_x3, _x4, _x5, _x6) {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that update trait by trait id.\n * @param {String} handle member's handle.\n * @param {String} traitId trait id.\n * @param {Array} data trait data array.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar updateUserTrait = function () {\n  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(handle, traitId, data, tokenV3) {\n    var result;\n    return _regenerator2.default.wrap(function _callee3$(_context3) {\n      while (1) {\n        switch (_context3.prev = _context3.next) {\n          case 0:\n            _context3.next = 2;\n            return (0, _userTraits.getService)(tokenV3).updateUserTrait(handle, traitId, data);\n\n          case 2:\n            result = _context3.sent;\n            return _context3.abrupt('return', { result: result, handle: handle, traitId: traitId });\n\n          case 4:\n          case 'end':\n            return _context3.stop();\n        }\n      }\n    }, _callee3, this);\n  }));\n\n  return function updateUserTrait(_x7, _x8, _x9, _x10) {\n    return _ref3.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @desc Creates an action that delete trait by trait id.\n * @param {String} handle member's handle.\n * @param {String} traitId trait id.\n * @param {String} tokenV3 v3 auth token.\n * @return {Action}\n */\n\n\nvar deleteUserTrait = function () {\n  var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(handle, traitId, tokenV3) {\n    var data;\n    return _regenerator2.default.wrap(function _callee4$(_context4) {\n      while (1) {\n        switch (_context4.prev = _context4.next) {\n          case 0:\n            _context4.next = 2;\n            return (0, _userTraits.getService)(tokenV3).deleteUserTrait(handle, traitId);\n\n          case 2:\n            data = _context4.sent;\n            return _context4.abrupt('return', { data: data, handle: handle, traitId: traitId });\n\n          case 4:\n          case 'end':\n            return _context4.stop();\n        }\n      }\n    }, _callee4, this);\n  }));\n\n  return function deleteUserTrait(_x11, _x12, _x13) {\n    return _ref4.apply(this, arguments);\n  };\n}();\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _userTraits = __webpack_require__(/*! ../services/user-traits */ \"./src/services/user-traits.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.settings\"\n       * @desc Actions related to settings page.\n       */\n\nvar _default = (0, _reduxActions.createActions)({\n  SETTINGS: {\n    GET_ALL_USER_TRAITS: getAllUserTraits,\n    ADD_USER_TRAIT: addUserTrait,\n    DELETE_USER_TRAIT: deleteUserTrait,\n    UPDATE_USER_TRAIT: updateUserTrait,\n    MODIFY_USER_TRAIT_INIT: _lodash2.default.noop\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getAllUserTraits, 'getAllUserTraits', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/settings.js');\n  reactHotLoader.register(addUserTrait, 'addUserTrait', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/settings.js');\n  reactHotLoader.register(updateUserTrait, 'updateUserTrait', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/settings.js');\n  reactHotLoader.register(deleteUserTrait, 'deleteUserTrait', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/settings.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/settings.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/settings.js?");
 
 /***/ }),
 
@@ -580,7 +580,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _api = __webpack_require__(/*! ../services/api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.smp\"\n       * @desc Actions related to *My Submissions Management* page.\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of submission download.\n * @return {Action}\n */\nfunction deleteSubmissionInit() {}\n\n/**\n * @static\n * @desc Creates an action that deletes user's submission to a challenge.\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @param {Number|String} submissionId Submission ID.\n * @return {Action}\n */\nfunction deleteSubmissionDone(tokenV3, submissionId) {\n  return (0, _api.getApi)('V3', tokenV3).delete('/submissions/' + submissionId).then(function () {\n    return submissionId;\n  });\n}\n\n/**\n * @static\n * @todo At this moment we don't need any special JS code to download\n * submissions: we get them from legacy Topcoder Studio API, which is\n * authenticated by cookies, and can be done with a simple <a> link in\n * the component. Soon we'll migrate to use the new TC API instead, and\n * then we'll decide, whether we need operate downloads in JS, or can we\n * just remove this action.\n * @return {Action}\n */\nfunction downloadSubmission(tokens, type, submissionId) {\n  _lodash2.default.noop(tokens, type, submissionId);\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  SMP: {\n    DELETE_SUBMISSION_DONE: deleteSubmissionDone,\n    DELETE_SUBMISSION_INIT: deleteSubmissionInit,\n    DOWNLOAD_SUBMISSION: downloadSubmission\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(deleteSubmissionInit, 'deleteSubmissionInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/smp.js');\n  reactHotLoader.register(deleteSubmissionDone, 'deleteSubmissionDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/smp.js');\n  reactHotLoader.register(downloadSubmission, 'downloadSubmission', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/smp.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/smp.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/smp.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _api = __webpack_require__(/*! ../services/api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.smp\"\n       * @desc Actions related to *My Submissions Management* page.\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of submission download.\n * @return {Action}\n */\nfunction deleteSubmissionInit() {}\n\n/**\n * @static\n * @desc Creates an action that deletes user's submission to a challenge.\n * @param {String} tokenV3 Topcoder v3 auth token.\n * @param {Number|String} submissionId Submission ID.\n * @return {Action}\n */\nfunction deleteSubmissionDone(tokenV3, submissionId) {\n  return (0, _api.getApi)('V3', tokenV3).delete('/submissions/' + submissionId).then(function () {\n    return submissionId;\n  });\n}\n\n/**\n * @static\n * @todo At this moment we don't need any special JS code to download\n * submissions: we get them from legacy Topcoder Studio API, which is\n * authenticated by cookies, and can be done with a simple <a> link in\n * the component. Soon we'll migrate to use the new TC API instead, and\n * then we'll decide, whether we need operate downloads in JS, or can we\n * just remove this action.\n * @return {Action}\n */\nfunction downloadSubmission(tokens, type, submissionId) {\n  _lodash2.default.noop(tokens, type, submissionId);\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  SMP: {\n    DELETE_SUBMISSION_DONE: deleteSubmissionDone,\n    DELETE_SUBMISSION_INIT: deleteSubmissionInit,\n    DOWNLOAD_SUBMISSION: downloadSubmission\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(deleteSubmissionInit, 'deleteSubmissionInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/smp.js');\n  reactHotLoader.register(deleteSubmissionDone, 'deleteSubmissionDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/smp.js');\n  reactHotLoader.register(downloadSubmission, 'downloadSubmission', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/smp.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/smp.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/smp.js?");
 
 /***/ }),
 
@@ -592,7 +592,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Create an action that gets statistics related to the specified\n * community. Data will be loaded into `stats.communities[communityId]` path of\n * the Redux store.\n * @todo The action should be refactored, see comments in the code.\n * @param {Object} community details of the community.\n * @param {String} uuid Operation UUID\n * @param {Array} challenges challenges from challengeListing to filter and do statistics\n * @param {String} token V3 Topcoder auth token. It is necessary to get data\n *  related to private groups.\n * @return {Action}\n */\n/* TODO: This code should be moved to a dedicated service. */\nvar getCommunityStatsDone = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(community, uuid, challenges, token) {\n    var filtered, filterFunction, totalPrize, groupService, result, groupId;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            _context.prev = 0;\n\n            /* TODO: At the moment, this component loads challenge objects to calculate\n            * the number of challenges and the total prize. Probably in future, we'll\n            * have a special API to get these data. */\n            filtered = challenges.filter(function (x) {\n              return x.status === 'ACTIVE';\n            });\n\n            if (community.challengeFilter) {\n              filterFunction = Filter.getFilterFunction(community.challengeFilter);\n\n              filtered = filtered.filter(filterFunction);\n            }\n            totalPrize = Math.round(filtered.reduce(function (total, challenge) {\n              return total + (challenge.totalPrize || 0);\n            }, 0));\n            groupService = (0, _groups.getService)(token);\n            result = {\n              community: community.communityId,\n              stats: {},\n              uuid: uuid\n            };\n\n            if (filtered.length) result.stats.numChallenges = filtered.length;\n            if (totalPrize) result.stats.openPrizes = '$' + totalPrize.toLocaleString();\n\n            groupId = _lodash2.default.get(community, 'groupIds[0]');\n\n            if (!groupId) {\n              _context.next = 13;\n              break;\n            }\n\n            _context.next = 12;\n            return groupService.getMembersCount(groupId, true);\n\n          case 12:\n            result.stats.numMembers = _context.sent;\n\n          case 13:\n            return _context.abrupt('return', result);\n\n          case 16:\n            _context.prev = 16;\n            _context.t0 = _context['catch'](0);\n            return _context.abrupt('return', {\n              community: community.communityId,\n              stats: {},\n              uuid: uuid\n            });\n\n          case 19:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this, [[0, 16]]);\n  }));\n\n  return function getCommunityStatsDone(_x, _x2, _x3, _x4) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _filter = __webpack_require__(/*! ../utils/challenge/filter */ \"./src/utils/challenge/filter.js\");\n\nvar Filter = _interopRequireWildcard(_filter);\n\nvar _groups = __webpack_require__(/*! ../services/groups */ \"./src/services/groups.js\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.stats\"\n       * @desc Actions related to Topcoder statistics (at the moment, only community\n       *  statistics).\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of the loading community\n *  stats.\n * @param {Object} community Community meta-data object.\n * @param {String} [community.communityId] Community ID.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\nfunction getCommunityStatsInit(community, uuid) {\n  return { community: community.communityId, uuid: uuid };\n}\nvar _default = (0, _reduxActions.createActions)({\n  STATS: {\n    GET_COMMUNITY_STATS_INIT: getCommunityStatsInit,\n    GET_COMMUNITY_STATS_DONE: getCommunityStatsDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getCommunityStatsInit, 'getCommunityStatsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/stats.js');\n  reactHotLoader.register(getCommunityStatsDone, 'getCommunityStatsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/stats.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/stats.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/stats.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * @static\n * @desc Create an action that gets statistics related to the specified\n * community. Data will be loaded into `stats.communities[communityId]` path of\n * the Redux store.\n * @todo The action should be refactored, see comments in the code.\n * @param {Object} community details of the community.\n * @param {String} uuid Operation UUID\n * @param {Array} challenges challenges from challengeListing to filter and do statistics\n * @param {String} token V3 Topcoder auth token. It is necessary to get data\n *  related to private groups.\n * @return {Action}\n */\n/* TODO: This code should be moved to a dedicated service. */\nvar getCommunityStatsDone = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(community, uuid, challenges, token) {\n    var filtered, filterFunction, totalPrize, groupService, result, groupId;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            _context.prev = 0;\n\n            /* TODO: At the moment, this component loads challenge objects to calculate\n            * the number of challenges and the total prize. Probably in future, we'll\n            * have a special API to get these data. */\n            filtered = challenges.filter(function (x) {\n              return x.status === 'ACTIVE';\n            });\n\n            if (community.challengeFilter) {\n              filterFunction = Filter.getFilterFunction(community.challengeFilter);\n\n              filtered = filtered.filter(filterFunction);\n            }\n            totalPrize = Math.round(filtered.reduce(function (total, challenge) {\n              return total + (challenge.totalPrize || 0);\n            }, 0));\n            groupService = (0, _groups.getService)(token);\n            result = {\n              community: community.communityId,\n              stats: {},\n              uuid: uuid\n            };\n\n            if (filtered.length) result.stats.numChallenges = filtered.length;\n            if (totalPrize) result.stats.openPrizes = '$' + totalPrize.toLocaleString();\n\n            groupId = _lodash2.default.get(community, 'groupIds[0]');\n\n            if (!groupId) {\n              _context.next = 13;\n              break;\n            }\n\n            _context.next = 12;\n            return groupService.getMembersCount(groupId, true);\n\n          case 12:\n            result.stats.numMembers = _context.sent;\n\n          case 13:\n            return _context.abrupt('return', result);\n\n          case 16:\n            _context.prev = 16;\n            _context.t0 = _context['catch'](0);\n            return _context.abrupt('return', {\n              community: community.communityId,\n              stats: {},\n              uuid: uuid\n            });\n\n          case 19:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this, [[0, 16]]);\n  }));\n\n  return function getCommunityStatsDone(_x, _x2, _x3, _x4) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _filter = __webpack_require__(/*! ../utils/challenge/filter */ \"./src/utils/challenge/filter.js\");\n\nvar Filter = _interopRequireWildcard(_filter);\n\nvar _groups = __webpack_require__(/*! ../services/groups */ \"./src/services/groups.js\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.stats\"\n       * @desc Actions related to Topcoder statistics (at the moment, only community\n       *  statistics).\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of the loading community\n *  stats.\n * @param {Object} community Community meta-data object.\n * @param {String} [community.communityId] Community ID.\n * @param {String} uuid Operation UUID.\n * @return {Action}\n */\nfunction getCommunityStatsInit(community, uuid) {\n  return { community: community.communityId, uuid: uuid };\n}\nvar _default = (0, _reduxActions.createActions)({\n  STATS: {\n    GET_COMMUNITY_STATS_INIT: getCommunityStatsInit,\n    GET_COMMUNITY_STATS_DONE: getCommunityStatsDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getCommunityStatsInit, 'getCommunityStatsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/stats.js');\n  reactHotLoader.register(getCommunityStatsDone, 'getCommunityStatsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/stats.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/stats.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/stats.js?");
 
 /***/ }),
 
@@ -604,7 +604,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _terms = __webpack_require__(/*! ../services/terms */ \"./src/services/terms.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.terms\"\n       * @desc Actions related to Topcoder terms of use.\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of fetching terms data.\n * @todo Figure out the exact meaning of the argument.\n * @param {String} arg An argument. The exact meaning to be figured out.\n * @return {Action}\n */\nfunction getTermsInit(arg) {\n  return arg;\n}\n\n/**\n * @static\n * @desc Creates an action that fetches terms of the specified entity.\n * @param {Object}  entity       entity object\n * @param {String}  [entity.type]  entity type: `challenge` or `community`\n * @param {String}  [entity.id]    entity id\n * @param {Object}  tokens       object with tokenV2 and tokenV3 properties\n * @param {Boolean} mockAgreed   if true, then all terms will be mocked as\n *  agreed this only makes effect if MOCK_TERMS_SERVICE is `true` and the only\n *  purpose of this param is testing terms\n * @return {Action}\n */\nfunction getTermsDone(entity, tokens, mockAgreed) {\n  var service = (0, _terms.getService)(tokens.tokenV2);\n  var termsPromise = void 0;\n\n  // if mockAgreed=true passed, then we create an array of 10 true which we pass to the\n  // terms service methods.\n  // when terms service is mocked by setting MOCK_TERMS_SERVICE=true\n  // it will make all terms to have agreed status (actually only first 10 will be agreed,\n  // but we will hardly have even more then 3 terms per entity)\n  var mockAgreedArray = mockAgreed ? Array(10 + 1).join('1').split('').map(function () {\n    return true;\n  }) : [];\n\n  switch (entity.type) {\n    case 'challenge':\n      {\n        termsPromise = service.getChallengeTerms(entity.id, mockAgreedArray);\n        break;\n      }\n    case 'community':\n      {\n        termsPromise = service.getCommunityTerms(entity.id, tokens.tokenV3, mockAgreedArray);\n        break;\n      }\n    case 'reviewOpportunity':\n      {\n        termsPromise = service.getReviewOpportunityTerms(entity.reviewOpportunityTerms);\n        break;\n      }\n    default:\n      throw new Error('Entity type \\'' + entity.type + '\\' is not supported by getTermsDone.');\n  }\n\n  return termsPromise.then(function (res) {\n    return { entity: entity, terms: res.terms };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of terms status check\n *  operation.\n * @return {Action}\n */\nfunction checkStatusInit() {}\n\n/**\n * @static\n * @desc Creates an action thatwill check if all terms of specified entity have been agreed,\n *\n * @todo As in some reason backend does not saves immediately that DocuSign term has been agreed\n * In case not all terms were agreed we try again after some delay.\n * Maximum quantity attempts and delay between attempts are configured in\n * MAX_ATTEMPTS and TIME_OUT\n *\n * @todo: Looks like the bug described above was caused by server caching responses\n * at least for getTermDetails which is used by getCommunityTerms.\n * To fix it I've added nocache random value param in the terms service\n * for getTermDetails and it looks like works so we get results immediately.\n * This still have to be tested for challenges as they use another endpoint\n * in method getChallengeTerms.\n * Also terms which use third part service DocuSign has to be also tested prior\n * to removing multiple checks.\n * In case their agreed status is updated immediately, this code\n * has to simplified and don't make several attempts, only one.\n *\n * @param {Object} entity       entity object\n * @param {String} [entity.type]  entity type `challenge` or `community`.\n * @param {String} [entity.id]    entity id\n * @param {Object} tokens       object with tokenV2 and tokenV3 properties\n *\n * @return {Acion}\n */\nfunction checkStatusDone(entity, tokens) {\n  // timeout between checking status attempts\n  var TIME_OUT = 5000;\n\n  // maximum attempts to check status\n  var MAX_ATTEMPTS = 5;\n\n  // we set this flag for getTermsDone when MOCK_TERMS_SERVICE is true\n  // so that checkStatusDone resolves to all terms agreed when mocking\n  var mockAgreed = _topcoderReactUtils.config.MOCK_TERMS_SERVICE;\n\n  /*\n   * Promisified setTimeout\n   * @param  {Number} timeout timeout in milliseconds\n   * @return {Promise}         resolves after timeout\n   */\n  var delay = function delay(timeout) {\n    return new _promise2.default(function (resolve) {\n      setTimeout(resolve, timeout);\n    });\n  };\n\n  /*\n   * Makes attempt to check status\n   * @param  {Number} maxAttempts maximum number of attempts to perform\n   * @return {Promise}            resolves to the list of term objects\n   */\n  var checkStatus = function checkStatus(maxAttempts) {\n    return getTermsDone(entity, tokens, mockAgreed).then(function (res) {\n      var allAgreed = _lodash2.default.every(res.terms, 'agreed');\n\n      // if not all terms are agreed and we still have some attempts to try\n      if (!allAgreed && maxAttempts > 1) {\n        return delay(TIME_OUT).then(function () {\n          return checkStatus(maxAttempts - 1);\n        });\n      }\n\n      return res.terms;\n    });\n  };\n\n  return checkStatus(MAX_ATTEMPTS);\n}\n\n/**\n * @static\n * @desc Creates an action that marks that we are about to fetch details of the\n *  specified term. If any details for another term are currently being fetched,\n * they will be silently discarded.\n * @param {Number|String} termId\n * @return {Action}\n */\nfunction getTermDetailsInit(termId) {\n  return _lodash2.default.toString(termId);\n}\n\n/**\n * @static\n * @desc Creates an action that fetches details of the specified term.\n * @param {Number|String} termId\n * @param {String} tokenV2\n * @return {Action}\n */\nfunction getTermDetailsDone(termId, tokenV2) {\n  var service = (0, _terms.getService)(tokenV2);\n  return service.getTermDetails(termId).then(function (details) {\n    return { termId: termId, details: details };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting a DocuSign URL.\n * @param  {Number|String} templateId id of document template to sign\n * @return {Action}\n */\nfunction getDocuSignUrlInit(templateId) {\n  return _lodash2.default.toString(templateId);\n}\n\n/**\n * @static\n * @desc Creates an action that generates the url of DoduSign term\n * @param  {Number|String} templateId id of document template to sign\n * @param  {String} returnUrl  callback url after finishing singing\n * @param  {String} tokenV2    auth token\n * @return {Action}\n */\nfunction getDocuSignUrlDone(templateId, returnUrl, tokenV2) {\n  var service = (0, _terms.getService)(tokenV2);\n  return service.getDocuSignUrl(templateId, returnUrl).then(function (resp) {\n    return { templateId: templateId, docuSignUrl: resp.recipientViewUrl };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of terms agreement operation.\n * @param  {Number|String} termId id of term\n * @return {Action}\n */\nfunction agreeTermInit(termId) {\n  return _lodash2.default.toString(termId);\n}\n\n/**\n * @static\n * @desc Creates an action that agrees to a term.\n * @param  {Number|String} termId id of term\n * @param  {String} tokenV2    auth token\n * @return {Action}\n */\nfunction agreeTermDone(termId, tokenV2) {\n  var service = (0, _terms.getService)(tokenV2);\n  return service.agreeTerm(termId).then(function (resp) {\n    return { termId: termId, success: resp.success };\n  });\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  TERMS: {\n    GET_TERMS_INIT: getTermsInit,\n    GET_TERMS_DONE: getTermsDone,\n    GET_TERM_DETAILS_INIT: getTermDetailsInit,\n    GET_TERM_DETAILS_DONE: getTermDetailsDone,\n    GET_DOCU_SIGN_URL_INIT: getDocuSignUrlInit,\n    GET_DOCU_SIGN_URL_DONE: getDocuSignUrlDone,\n    AGREE_TERM_INIT: agreeTermInit,\n    AGREE_TERM_DONE: agreeTermDone,\n    CHECK_STATUS_INIT: checkStatusInit,\n    CHECK_STATUS_DONE: checkStatusDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getTermsInit, 'getTermsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getTermsDone, 'getTermsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(checkStatusInit, 'checkStatusInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(checkStatusDone, 'checkStatusDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getTermDetailsInit, 'getTermDetailsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getTermDetailsDone, 'getTermDetailsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getDocuSignUrlInit, 'getDocuSignUrlInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getDocuSignUrlDone, 'getDocuSignUrlDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(agreeTermInit, 'agreeTermInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(agreeTermDone, 'agreeTermDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/actions/terms.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/terms.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _terms = __webpack_require__(/*! ../services/terms */ \"./src/services/terms.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"actions.terms\"\n       * @desc Actions related to Topcoder terms of use.\n       */\n\n/**\n * @static\n * @desc Creates an action that signals beginning of fetching terms data.\n * @todo Figure out the exact meaning of the argument.\n * @param {String} arg An argument. The exact meaning to be figured out.\n * @return {Action}\n */\nfunction getTermsInit(arg) {\n  return arg;\n}\n\n/**\n * @static\n * @desc Creates an action that fetches terms of the specified entity.\n * @param {Object}  entity       entity object\n * @param {String}  [entity.type]  entity type: `challenge` or `community`\n * @param {String}  [entity.id]    entity id\n * @param {Object}  tokens       object with tokenV2 and tokenV3 properties\n * @param {Boolean} mockAgreed   if true, then all terms will be mocked as\n *  agreed this only makes effect if MOCK_TERMS_SERVICE is `true` and the only\n *  purpose of this param is testing terms\n * @return {Action}\n */\nfunction getTermsDone(entity, tokens, mockAgreed) {\n  var service = (0, _terms.getService)(tokens.tokenV2);\n  var termsPromise = void 0;\n\n  // if mockAgreed=true passed, then we create an array of 10 true which we pass to the\n  // terms service methods.\n  // when terms service is mocked by setting MOCK_TERMS_SERVICE=true\n  // it will make all terms to have agreed status (actually only first 10 will be agreed,\n  // but we will hardly have even more then 3 terms per entity)\n  var mockAgreedArray = mockAgreed ? Array(10 + 1).join('1').split('').map(function () {\n    return true;\n  }) : [];\n\n  switch (entity.type) {\n    case 'challenge':\n      {\n        termsPromise = service.getChallengeTerms(entity.id, mockAgreedArray);\n        break;\n      }\n    case 'community':\n      {\n        termsPromise = service.getCommunityTerms(entity.id, tokens.tokenV3, mockAgreedArray);\n        break;\n      }\n    case 'reviewOpportunity':\n      {\n        termsPromise = service.getReviewOpportunityTerms(entity.reviewOpportunityTerms);\n        break;\n      }\n    default:\n      throw new Error('Entity type \\'' + entity.type + '\\' is not supported by getTermsDone.');\n  }\n\n  return termsPromise.then(function (res) {\n    return { entity: entity, terms: res.terms };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of terms status check\n *  operation.\n * @return {Action}\n */\nfunction checkStatusInit() {}\n\n/**\n * @static\n * @desc Creates an action thatwill check if all terms of specified entity have been agreed,\n *\n * @todo As in some reason backend does not saves immediately that DocuSign term has been agreed\n * In case not all terms were agreed we try again after some delay.\n * Maximum quantity attempts and delay between attempts are configured in\n * MAX_ATTEMPTS and TIME_OUT\n *\n * @todo: Looks like the bug described above was caused by server caching responses\n * at least for getTermDetails which is used by getCommunityTerms.\n * To fix it I've added nocache random value param in the terms service\n * for getTermDetails and it looks like works so we get results immediately.\n * This still have to be tested for challenges as they use another endpoint\n * in method getChallengeTerms.\n * Also terms which use third part service DocuSign has to be also tested prior\n * to removing multiple checks.\n * In case their agreed status is updated immediately, this code\n * has to simplified and don't make several attempts, only one.\n *\n * @param {Object} entity       entity object\n * @param {String} [entity.type]  entity type `challenge` or `community`.\n * @param {String} [entity.id]    entity id\n * @param {Object} tokens       object with tokenV2 and tokenV3 properties\n *\n * @return {Acion}\n */\nfunction checkStatusDone(entity, tokens) {\n  // timeout between checking status attempts\n  var TIME_OUT = 5000;\n\n  // maximum attempts to check status\n  var MAX_ATTEMPTS = 5;\n\n  // we set this flag for getTermsDone when MOCK_TERMS_SERVICE is true\n  // so that checkStatusDone resolves to all terms agreed when mocking\n  var mockAgreed = _topcoderReactUtils.config.MOCK_TERMS_SERVICE;\n\n  /*\n   * Promisified setTimeout\n   * @param  {Number} timeout timeout in milliseconds\n   * @return {Promise}         resolves after timeout\n   */\n  var delay = function delay(timeout) {\n    return new _promise2.default(function (resolve) {\n      setTimeout(resolve, timeout);\n    });\n  };\n\n  /*\n   * Makes attempt to check status\n   * @param  {Number} maxAttempts maximum number of attempts to perform\n   * @return {Promise}            resolves to the list of term objects\n   */\n  var checkStatus = function checkStatus(maxAttempts) {\n    return getTermsDone(entity, tokens, mockAgreed).then(function (res) {\n      var allAgreed = _lodash2.default.every(res.terms, 'agreed');\n\n      // if not all terms are agreed and we still have some attempts to try\n      if (!allAgreed && maxAttempts > 1) {\n        return delay(TIME_OUT).then(function () {\n          return checkStatus(maxAttempts - 1);\n        });\n      }\n\n      return res.terms;\n    });\n  };\n\n  return checkStatus(MAX_ATTEMPTS);\n}\n\n/**\n * @static\n * @desc Creates an action that marks that we are about to fetch details of the\n *  specified term. If any details for another term are currently being fetched,\n * they will be silently discarded.\n * @param {Number|String} termId\n * @return {Action}\n */\nfunction getTermDetailsInit(termId) {\n  return _lodash2.default.toString(termId);\n}\n\n/**\n * @static\n * @desc Creates an action that fetches details of the specified term.\n * @param {Number|String} termId\n * @param {String} tokenV2\n * @return {Action}\n */\nfunction getTermDetailsDone(termId, tokenV2) {\n  var service = (0, _terms.getService)(tokenV2);\n  return service.getTermDetails(termId).then(function (details) {\n    return { termId: termId, details: details };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of getting a DocuSign URL.\n * @param  {Number|String} templateId id of document template to sign\n * @return {Action}\n */\nfunction getDocuSignUrlInit(templateId) {\n  return _lodash2.default.toString(templateId);\n}\n\n/**\n * @static\n * @desc Creates an action that generates the url of DoduSign term\n * @param  {Number|String} templateId id of document template to sign\n * @param  {String} returnUrl  callback url after finishing singing\n * @param  {String} tokenV2    auth token\n * @return {Action}\n */\nfunction getDocuSignUrlDone(templateId, returnUrl, tokenV2) {\n  var service = (0, _terms.getService)(tokenV2);\n  return service.getDocuSignUrl(templateId, returnUrl).then(function (resp) {\n    return { templateId: templateId, docuSignUrl: resp.recipientViewUrl };\n  });\n}\n\n/**\n * @static\n * @desc Creates an action that signals beginning of terms agreement operation.\n * @param  {Number|String} termId id of term\n * @return {Action}\n */\nfunction agreeTermInit(termId) {\n  return _lodash2.default.toString(termId);\n}\n\n/**\n * @static\n * @desc Creates an action that agrees to a term.\n * @param  {Number|String} termId id of term\n * @param  {String} tokenV2    auth token\n * @return {Action}\n */\nfunction agreeTermDone(termId, tokenV2) {\n  var service = (0, _terms.getService)(tokenV2);\n  return service.agreeTerm(termId).then(function (resp) {\n    return { termId: termId, success: resp.success };\n  });\n}\n\nvar _default = (0, _reduxActions.createActions)({\n  TERMS: {\n    GET_TERMS_INIT: getTermsInit,\n    GET_TERMS_DONE: getTermsDone,\n    GET_TERM_DETAILS_INIT: getTermDetailsInit,\n    GET_TERM_DETAILS_DONE: getTermDetailsDone,\n    GET_DOCU_SIGN_URL_INIT: getDocuSignUrlInit,\n    GET_DOCU_SIGN_URL_DONE: getDocuSignUrlDone,\n    AGREE_TERM_INIT: agreeTermInit,\n    AGREE_TERM_DONE: agreeTermDone,\n    CHECK_STATUS_INIT: checkStatusInit,\n    CHECK_STATUS_DONE: checkStatusDone\n  }\n});\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getTermsInit, 'getTermsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getTermsDone, 'getTermsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(checkStatusInit, 'checkStatusInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(checkStatusDone, 'checkStatusDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getTermDetailsInit, 'getTermDetailsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getTermDetailsDone, 'getTermDetailsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getDocuSignUrlInit, 'getDocuSignUrlInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(getDocuSignUrlDone, 'getDocuSignUrlDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(agreeTermInit, 'agreeTermInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(agreeTermDone, 'agreeTermDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/actions/terms.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/actions/terms.js?");
 
 /***/ }),
 
@@ -640,7 +640,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.factory = undefined;\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\n/**\n * Creates a new reducer.\n * @param {Object} options={} Optional. Options for customization of initial\n *  state.\n * @param {String} [options.auth.tokenV2=''] Optional. Topcoder v2 auth token.\n * @param {String} [options.auth.tokenV3=''] Optional. Topcoder v3 auth token.\n * @returns {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nvar factory = exports.factory = function () {\n  var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var state, a;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            state = {\n              tokenV2: _lodash2.default.get(options.auth, 'tokenV2'),\n              tokenV3: _lodash2.default.get(options.auth, 'tokenV3')\n            };\n\n            if (!state.tokenV3) {\n              _context.next = 8;\n              break;\n            }\n\n            state.user = (0, _tcAccounts.decodeToken)(state.tokenV3);\n            a = _auth2.default.auth.loadProfile(state.tokenV3);\n            _context.next = 6;\n            return _topcoderReactUtils.redux.resolveAction(a);\n\n          case 6:\n            a = _context.sent;\n            return _context.abrupt('return', create(onProfileLoaded(state, a)));\n\n          case 8:\n            return _context.abrupt('return', create(state));\n\n          case 9:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function factory() {\n    return _ref6.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _auth = __webpack_require__(/*! ../actions/auth */ \"./src/actions/auth.js\");\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _profile = __webpack_require__(/*! ../actions/profile */ \"./src/actions/profile.js\");\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.auth\"\n       * @desc Reducer for {@link module:actions.auth} actions.\n       *\n       * State segment managed by this reducer has the following structure:\n       * @param {Boolean} authenticating=true `true` if authentication is still in\n       *  progress; `false` if it has already completed or failed.\n       * @param {Object} profile=null Topcoder user profile.\n       * @param {String} tokenV2='' Topcoder v2 auth token.\n       * @param {String} tokenV3='' Topcoder v3 auth token.\n       * @param {Object} user=null Topcoder user object (user information stored in\n       *  v3 auth token).\n       */\n\n/**\n * Handles actions.auth.loadProfile action.\n * @param {Object} state\n * @param {Object} action\n */\nfunction onProfileLoaded(state, action) {\n  return (0, _extends3.default)({}, state, {\n    authenticating: false,\n    profile: action.payload\n  });\n}\n\n/**\n * Creates a new Auth reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @param {Object} mergeReducers Optional. Reducers to merge.\n * @return {Function} Auth reducer.\n */\nfunction create(initialState) {\n  var _redux$handleActions;\n\n  return _topcoderReactUtils.redux.handleActions((_redux$handleActions = {}, (0, _defineProperty3.default)(_redux$handleActions, _auth2.default.auth.loadProfile, onProfileLoaded), (0, _defineProperty3.default)(_redux$handleActions, _auth2.default.auth.setTcTokenV2, function (state, action) {\n    return (0, _extends3.default)({}, state, {\n      tokenV2: action.payload\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _auth2.default.auth.setTcTokenV3, function (state, _ref) {\n    var payload = _ref.payload;\n    return (0, _extends3.default)({}, state, {\n      tokenV3: payload,\n      user: payload ? (0, _tcAccounts.decodeToken)(payload) : null\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, 'COMMUNITY_ACTIONS/TC_COMMUNITY/JOIN_DONE', function COMMUNITY_ACTIONSTC_COMMUNITYJOIN_DONE(state, _ref2) {\n    var payload = _ref2.payload;\n    return (0, _extends3.default)({}, state, {\n      profile: (0, _extends3.default)({}, state.profile, {\n        groups: state.profile.groups.concat({ id: payload.groupId.toString() })\n      })\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _profile2.default.profile.uploadPhotoDone, function (state, _ref3) {\n    var payload = _ref3.payload,\n        error = _ref3.error;\n\n    if (error) {\n      return state;\n    }\n    if (!state.profile || state.profile.handle !== payload.handle) {\n      return state;\n    }\n    return (0, _extends3.default)({}, state, {\n      profile: (0, _extends3.default)({}, state.profile, {\n        photoURL: payload.photoURL\n      })\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _profile2.default.profile.deletePhotoDone, function (state, _ref4) {\n    var payload = _ref4.payload,\n        error = _ref4.error;\n\n    if (error) {\n      return state;\n    }\n    if (!state.profile || state.profile.handle !== payload.handle) {\n      return state;\n    }\n    return (0, _extends3.default)({}, state, {\n      profile: (0, _extends3.default)({}, state.profile, {\n        photoURL: null\n      })\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _profile2.default.profile.updateProfileDone, function (state, _ref5) {\n    var payload = _ref5.payload,\n        error = _ref5.error;\n\n    if (error) {\n      return state;\n    }\n    if (!state.profile || state.profile.handle !== payload.handle) {\n      return state;\n    }\n    return (0, _extends3.default)({}, state, {\n      profile: (0, _extends3.default)({}, state.profile, payload)\n    });\n  }), _redux$handleActions), _lodash2.default.defaults(initialState, {\n    authenticating: true,\n    profile: null,\n    tokenV2: '',\n    tokenV3: '',\n    user: null\n  }));\n}\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onProfileLoaded, 'onProfileLoaded', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/auth.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/auth.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/auth.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/auth.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/auth.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.factory = undefined;\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\n/**\n * Creates a new reducer.\n * @param {Object} options={} Optional. Options for customization of initial\n *  state.\n * @param {String} [options.auth.tokenV2=''] Optional. Topcoder v2 auth token.\n * @param {String} [options.auth.tokenV3=''] Optional. Topcoder v3 auth token.\n * @returns {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nvar factory = exports.factory = function () {\n  var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var state, a;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            state = {\n              tokenV2: _lodash2.default.get(options.auth, 'tokenV2'),\n              tokenV3: _lodash2.default.get(options.auth, 'tokenV3')\n            };\n\n            if (!state.tokenV3) {\n              _context.next = 8;\n              break;\n            }\n\n            state.user = (0, _tcAccounts.decodeToken)(state.tokenV3);\n            a = _auth2.default.auth.loadProfile(state.tokenV3);\n            _context.next = 6;\n            return _topcoderReactUtils.redux.resolveAction(a);\n\n          case 6:\n            a = _context.sent;\n            return _context.abrupt('return', create(onProfileLoaded(state, a)));\n\n          case 8:\n            return _context.abrupt('return', create(state));\n\n          case 9:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function factory() {\n    return _ref6.apply(this, arguments);\n  };\n}();\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _auth = __webpack_require__(/*! ../actions/auth */ \"./src/actions/auth.js\");\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _profile = __webpack_require__(/*! ../actions/profile */ \"./src/actions/profile.js\");\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.auth\"\n       * @desc Reducer for {@link module:actions.auth} actions.\n       *\n       * State segment managed by this reducer has the following structure:\n       * @param {Boolean} authenticating=true `true` if authentication is still in\n       *  progress; `false` if it has already completed or failed.\n       * @param {Object} profile=null Topcoder user profile.\n       * @param {String} tokenV2='' Topcoder v2 auth token.\n       * @param {String} tokenV3='' Topcoder v3 auth token.\n       * @param {Object} user=null Topcoder user object (user information stored in\n       *  v3 auth token).\n       */\n\n/**\n * Handles actions.auth.loadProfile action.\n * @param {Object} state\n * @param {Object} action\n */\nfunction onProfileLoaded(state, action) {\n  return (0, _extends3.default)({}, state, {\n    authenticating: false,\n    profile: action.payload\n  });\n}\n\n/**\n * Creates a new Auth reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @param {Object} mergeReducers Optional. Reducers to merge.\n * @return {Function} Auth reducer.\n */\nfunction create(initialState) {\n  var _redux$handleActions;\n\n  return _topcoderReactUtils.redux.handleActions((_redux$handleActions = {}, (0, _defineProperty3.default)(_redux$handleActions, _auth2.default.auth.loadProfile, onProfileLoaded), (0, _defineProperty3.default)(_redux$handleActions, _auth2.default.auth.setTcTokenV2, function (state, action) {\n    return (0, _extends3.default)({}, state, {\n      tokenV2: action.payload\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _auth2.default.auth.setTcTokenV3, function (state, _ref) {\n    var payload = _ref.payload;\n    return (0, _extends3.default)({}, state, {\n      tokenV3: payload,\n      user: payload ? (0, _tcAccounts.decodeToken)(payload) : null\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, 'COMMUNITY_ACTIONS/TC_COMMUNITY/JOIN_DONE', function COMMUNITY_ACTIONSTC_COMMUNITYJOIN_DONE(state, _ref2) {\n    var payload = _ref2.payload;\n    return (0, _extends3.default)({}, state, {\n      profile: (0, _extends3.default)({}, state.profile, {\n        groups: state.profile.groups.concat({ id: payload.groupId.toString() })\n      })\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _profile2.default.profile.uploadPhotoDone, function (state, _ref3) {\n    var payload = _ref3.payload,\n        error = _ref3.error;\n\n    if (error) {\n      return state;\n    }\n    if (!state.profile || state.profile.handle !== payload.handle) {\n      return state;\n    }\n    return (0, _extends3.default)({}, state, {\n      profile: (0, _extends3.default)({}, state.profile, {\n        photoURL: payload.photoURL\n      })\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _profile2.default.profile.deletePhotoDone, function (state, _ref4) {\n    var payload = _ref4.payload,\n        error = _ref4.error;\n\n    if (error) {\n      return state;\n    }\n    if (!state.profile || state.profile.handle !== payload.handle) {\n      return state;\n    }\n    return (0, _extends3.default)({}, state, {\n      profile: (0, _extends3.default)({}, state.profile, {\n        photoURL: null\n      })\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _profile2.default.profile.updateProfileDone, function (state, _ref5) {\n    var payload = _ref5.payload,\n        error = _ref5.error;\n\n    if (error) {\n      return state;\n    }\n    if (!state.profile || state.profile.handle !== payload.handle) {\n      return state;\n    }\n    return (0, _extends3.default)({}, state, {\n      profile: (0, _extends3.default)({}, state.profile, payload)\n    });\n  }), _redux$handleActions), _lodash2.default.defaults(initialState, {\n    authenticating: true,\n    profile: null,\n    tokenV2: '',\n    tokenV3: '',\n    user: null\n  }));\n}\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onProfileLoaded, 'onProfileLoaded', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/auth.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/auth.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/auth.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/auth.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/auth.js?");
 
 /***/ }),
 
@@ -652,7 +652,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _set = __webpack_require__(/*! babel-runtime/core-js/set */ \"babel-runtime/core-js/set\");\n\nvar _set2 = _interopRequireDefault(_set);\n\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends4 = _interopRequireDefault(_extends3);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _url = __webpack_require__(/*! ../utils/url */ \"./src/utils/url.js\");\n\nvar _sort = __webpack_require__(/*! ../utils/challenge/sort */ \"./src/utils/challenge/sort.js\");\n\nvar _challengeListing = __webpack_require__(/*! ../actions/challenge-listing */ \"./src/actions/challenge-listing.js\");\n\nvar _challengeListing2 = _interopRequireDefault(_challengeListing);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./src/utils/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Reducer for state.challengeListing.\n       */\n\nvar fireErrorMessage = _utils.errors.fireErrorMessage;\nvar Filter = _utils.challenge.filter;\nvar _challengeUtils$bucke = _utils.challenge.buckets,\n    BUCKETS = _challengeUtils$bucke.BUCKETS,\n    BUCKET_DATA = _challengeUtils$bucke.BUCKET_DATA,\n    getBuckets = _challengeUtils$bucke.getBuckets;\n\n/**\n * Process challenge data for bucket\n * @param handle user handle\n * @param challenges all challenges\n * @param loaded fetched challenges of bucket\n * @param bucket bucket name\n * @param sorts all sorts data\n * @param sort sort name\n * @param filter filter object\n * @param frontFilter filter object\n */\n\nfunction processBucketData(handle, challenges, loaded, bucket, sorts, sort, filter, frontFilter) {\n  var buckets = _lodash2.default.isEmpty(handle) ? BUCKET_DATA : getBuckets(handle);\n  var data = _lodash2.default.has(challenges, bucket) ? challenges[bucket].filter(filter).concat(loaded) : _lodash2.default.clone(loaded);\n\n  var finalFilters = (0, _extends4.default)({}, frontFilter, buckets[bucket].filter);\n\n  var bucketFilter = bucket !== BUCKETS.REVIEW_OPPORTUNITIES ? Filter.getFilterFunction(finalFilters) : Filter.getReviewOpportunitiesFilterFunction(finalFilters);\n  var filteredData = [];\n  for (var i = 0; i < data.length; i += 1) {\n    if (bucketFilter(data[i])) {\n      filteredData.push(data[i]);\n    }\n  }\n\n  if (bucket !== BUCKETS.ALL) {\n    if (!_lodash2.default.isEmpty(sort)) {\n      filteredData.sort(_sort.SORTS_DATA[sort].func);\n      return filteredData;\n    }\n\n    if (_lodash2.default.has(sorts, bucket)) {\n      filteredData.sort(_sort.SORTS_DATA[sorts[bucket]].func);\n    } else {\n      filteredData.sort(_sort.SORTS_DATA[BUCKET_DATA[bucket].sorts[0]].func);\n    }\n  }\n\n  return filteredData;\n}\n\n/**\n * Check the challenges of bucket have been loaded all\n * @param challenges all challenges\n * @param bucket bucket name\n * @param loaded loaded challenges this time\n * @param data processed data\n * @returns {boolean}\n */\nfunction checkAllLoaded(challenges, bucket, loaded, data) {\n  var isAll = false;\n  if (loaded.length === 0) {\n    isAll = true;\n  } else if (!_lodash2.default.isEmpty(_lodash2.default.get(challenges, bucket)) && challenges[bucket].length === data.length) {\n    isAll = true;\n  }\n\n  return isAll;\n}\n\n/** TODO: Inspect if the 2 actions bellow can be removed?\n * They do  duplicate what is done in `getActiveChallengesDone` but fetch all challenges\n * which was refactored in listing-improve\n */\nfunction onGetAllActiveChallengesInit(state, _ref) {\n  var payload = _ref.payload;\n\n  return (0, _extends4.default)({}, state, { loadingActiveChallengesUUID: payload });\n}\nfunction onGetAllActiveChallengesDone(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  if (error) {\n    _utils.logger.error(payload);\n    return state;\n  }\n  var uuid = payload.uuid,\n      loaded = payload.challenges,\n      handle = payload.handle;\n\n  if (uuid !== state.loadingActiveChallengesUUID) return state;\n  /* Once all active challenges are fetched from the API, we remove from the\n   * store any active challenges stored there previously, and also any\n   * challenges with IDs matching any challenges loaded now as active. */\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  var filter = function filter(item) {\n    return !ids.has(item.id) && item.status !== 'ACTIVE';\n  };\n  // BUCKET.MY\n  var my = processBucketData(handle, state.challenges, loaded, BUCKETS.MY, null, null, filter, {});\n  // BUCKET.ALL\n  var all = processBucketData(handle, state.challenges, loaded, BUCKETS.ALL, null, null, filter, {});\n\n  var newChallenges = _lodash2.default.cloneDeep(state.challenges);\n  newChallenges[BUCKETS.ALL] = all;\n  newChallenges[BUCKETS.MY] = my;\n\n  return (0, _extends4.default)({}, state, {\n    challenges: newChallenges,\n    lastUpdateOfActiveChallenges: Date.now(),\n    loadingActiveChallengesUUID: ''\n  });\n}\n\n/**\n * Called when 1st page of ative challenges is loaded from `/challenges` api\n * @param {*} state\n * @param {*} param1\n */\nfunction onGetActiveChallengesDone(state, _ref3) {\n  var error = _ref3.error,\n      payload = _ref3.payload;\n\n  if (error) {\n    _utils.logger.error(payload);\n    return state;\n  }\n  var uuid = payload.uuid,\n      loaded = payload.challenges,\n      sort = payload.sort,\n      bucket = payload.bucket,\n      tokenV3 = payload.tokenV3,\n      handle = payload.handle,\n      frontFilter = payload.frontFilter,\n      meta = payload.meta;\n\n  /* Once all active challenges are fetched from the API, we remove from the\n   * store any active challenges stored there previously, and also any\n   * challenges with IDs matching any challenges loaded now as active. */\n\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  var filter = void 0;\n  var newChallenges = {};\n  var otherState = {};\n  switch (bucket) {\n    case BUCKETS.ALL:\n      {\n        if (uuid !== state.loadingActiveChallengesUUID) return state;\n        /* Fetching 0 page of active challenges also drops any active challenges\n        * loaded to the state before. */\n        filter = state.lastRequestedPageOfActiveChallenges ? function (item) {\n          return !ids.has(item.id);\n        } : function (item) {\n          return !ids.has(item.id) && item.status !== 'ACTIVE';\n        };\n\n        // my\n        var my = !_lodash2.default.isEmpty(tokenV3) ? processBucketData(handle, state.challenges, loaded, BUCKETS.MY, state.sorts, sort, filter) : [];\n        // open for registration\n        var open = processBucketData(handle, state.challenges, loaded, BUCKETS.OPEN_FOR_REGISTRATION, state.sorts, sort, filter);\n        // ongoing\n        var ongoing = processBucketData(handle, state.challenges, loaded, BUCKETS.ONGOING, state.sorts, sort, filter);\n        newChallenges = _lodash2.default.clone(state.challenges);\n        newChallenges[BUCKETS.MY] = my;\n        newChallenges[BUCKETS.OPEN_FOR_REGISTRATION] = open;\n        newChallenges[BUCKETS.ONGOING] = ongoing;\n        otherState.loadingActiveChallengesUUID = '';\n        otherState.meta = _lodash2.default.clone(meta);\n      }\n      break;\n    case BUCKETS.MY:\n      {\n        if (uuid !== state.loadingMyChallengesUUID) return state;\n        /* Fetching 0 page of active challenges also drops any active challenges\n        * loaded to the state before. */\n        filter = state.lastRequestedPageOfMyChallenges ? function (item) {\n          return !ids.has(item.id);\n        } : function (item) {\n          return !ids.has(item.id) && item.status !== 'ACTIVE';\n        };\n\n        var data = processBucketData(handle, state.challenges, loaded, bucket, state.sorts, sort, filter);\n        newChallenges = _lodash2.default.cloneDeep(state.challenges);\n        newChallenges[bucket] = data;\n        otherState.loadingMyChallengesUUID = '';\n        otherState.allMyChallengesLoaded = checkAllLoaded(state.challenges, bucket, loaded, data);\n        otherState.gettingMoreMyChallenges = !otherState.allMyChallengesLoaded;\n        otherState.meta = _lodash2.default.clone(meta);\n        /* TODO Due to the meta of backend response is currently not correct,\n        /* so should update counts after fetch all challenges of bucket */\n        if (_lodash2.default.get(meta, 'myChallengesCount') !== data.length && otherState.allMyChallengesLoaded) {\n          otherState.meta.myChallengesCount = data.length;\n          otherState.meta.allChallengesCount = meta.allChallengesCount + data.length - meta.myChallengesCount;\n        }\n      }\n      break;\n    case BUCKETS.OPEN_FOR_REGISTRATION:\n      {\n        if (uuid !== state.loadingOpenChallengesUUID) return state;\n        /* Fetching 0 page of active challenges also drops any active challenges\n        * loaded to the state before. */\n        filter = state.lastRequestedPageOfOpenChallenges ? function (item) {\n          return !ids.has(item.id);\n        } : function (item) {\n          return !ids.has(item.id) && item.status !== 'ACTIVE';\n        };\n\n        var _data = processBucketData(handle, state.challenges, loaded, bucket, state.sorts, sort, filter);\n\n        newChallenges = _lodash2.default.cloneDeep(state.challenges);\n        newChallenges[bucket] = _data;\n        otherState.loadingOpenChallengesUUID = '';\n        otherState.allOpenChallengesLoaded = checkAllLoaded(state.challenges, bucket, loaded, _data);\n        otherState.gettingMoreOpenChallenges = !otherState.allOpenChallengesLoaded;\n        otherState.meta = _lodash2.default.clone(meta);\n        /* TODO Due to the meta of backend response is currently not correct,\n        /* so should update counts after fetch all challenges of bucket */\n        if (_lodash2.default.get(meta, 'openChallengesCount') !== _data.length && otherState.allOpenChallengesLoaded) {\n          otherState.meta.openChallengesCount = _data.length;\n          otherState.meta.allChallengesCount = meta.allChallengesCount + _data.length - meta.openChallengesCount;\n        }\n      }\n      break;\n    case BUCKETS.ONGOING:\n      {\n        if (uuid !== state.loadingOnGoingChallengesUUID) return state;\n        /* Fetching 0 page of active challenges also drops any active challenges\n        * loaded to the state before. */\n        filter = state.lastRequestedPageOfOnGoingChallenges ? function (item) {\n          return !ids.has(item.id);\n        } : function (item) {\n          return !ids.has(item.id) && item.status !== 'ACTIVE';\n        };\n\n        var _data2 = processBucketData(handle, state.challenges, loaded, bucket, state.sorts, sort, filter);\n        newChallenges = _lodash2.default.cloneDeep(state.challenges);\n        newChallenges[bucket] = _data2;\n        otherState.loadingOnGoingChallengesUUID = '';\n        otherState.allOnGoingChallengesLoaded = checkAllLoaded(state.challenges, bucket, loaded, _data2);\n        otherState.gettingMoreOnGoingChallenges = !otherState.allOnGoingChallengesLoaded;\n        /* TODO Due to the meta of backend response is currently not correct,\n        /* so should update counts after fetch all challenges of bucket */\n        otherState.meta = _lodash2.default.clone(meta);\n        if (_lodash2.default.get(meta, 'ongoingChallengesCount') !== _data2.length && otherState.allOnGoingChallengesLoaded) {\n          otherState.meta.ongoingChallengesCount = _data2.length;\n          otherState.meta.allChallengesCount = meta.allChallengesCount + _data2.length - meta.ongoingChallengesCount;\n        }\n      }\n      break;\n    default:\n      break;\n  }\n\n  // all challenges used for other components like sub communities\n  newChallenges[BUCKETS.ALL] = processBucketData(handle, state.challenges, loaded, BUCKETS.ALL, null, null, filter, frontFilter);\n\n  return (0, _extends4.default)({}, state, otherState, {\n    challenges: newChallenges,\n    lastUpdateOfActiveChallenges: Date.now()\n  });\n}\n\n/**\n * Called when loading of 1st page of active challenges is started\n * @param {*} state\n * @param {*} param1\n */\nfunction onGetActiveChallengesInit(state, _ref4) {\n  var payload = _ref4.payload;\n  var page = payload.page,\n      bucket = payload.bucket,\n      uuid = payload.uuid;\n\n  var otherState = {};\n  switch (bucket) {\n    case BUCKETS.ALL:\n      otherState.loadingActiveChallengesUUID = uuid;\n      otherState.lastRequestedPageOfActiveChallenges = page;\n      break;\n    case BUCKETS.MY:\n      otherState.loadingMyChallengesUUID = uuid;\n      otherState.lastRequestedPageOfMyChallenges = page;\n      break;\n    case BUCKETS.OPEN_FOR_REGISTRATION:\n      otherState.loadingOpenChallengesUUID = uuid;\n      otherState.lastRequestedPageOfOpenChallenges = page;\n      break;\n    case BUCKETS.ONGOING:\n      otherState.loadingOnGoingChallengesUUID = uuid;\n      otherState.lastRequestedPageOfOnGoingChallenges = page;\n      break;\n    default:\n      break;\n  }\n\n  return (0, _extends4.default)({}, state, otherState);\n}\nfunction onGetRestActiveChallengesInit(state, _ref5) {\n  var payload = _ref5.payload;\n\n  return (0, _extends4.default)({}, state, {\n    loadingRestActiveChallengesUUID: payload.uuid\n  });\n}\n\n/**\n * Called when all challenges are loaded\n * @param {*} state\n * @param {*} param1\n */\nfunction onGetRestActiveChallengesDone(state, _ref6) {\n  var error = _ref6.error,\n      payload = _ref6.payload;\n\n  if (error) {\n    _utils.logger.error(payload);\n    return state;\n  }\n  var uuid = payload.uuid,\n      loaded = payload.challenges,\n      newMeta = payload.meta,\n      sort = payload.sort,\n      bucket = payload.bucket,\n      handle = payload.handle,\n      frontFilter = payload.frontFilter;\n\n  if (uuid !== state.loadingRestActiveChallengesUUID) return state;\n\n  /* Once all active challenges are fetched from the API, we remove from the\n   * store any active challenges stored there previously, and also any\n   * challenges with IDs matching any challenges loaded now as active. */\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  /* Fetching 0 page of active challenges also drops any active challenges\n   * loaded to the state before. */\n  var filter = function filter(item) {\n    return !ids.has(item.id);\n  };\n\n  var otherState = {};\n  var newChallenges = {};\n  switch (bucket) {\n    case BUCKETS.MY:\n    case BUCKETS.OPEN_FOR_REGISTRATION:\n    case BUCKETS.ONGOING:\n      {\n        var data = processBucketData(handle, state.challenges, loaded, bucket, state.sorts, sort, filter, frontFilter);\n        newChallenges = _lodash2.default.cloneDeep(state.challenges);\n        newChallenges[bucket] = data;\n        switch (bucket) {\n          case BUCKETS.MY:\n            otherState.allMyChallengesLoaded = true;\n            otherState.gettingMoreMyChallenges = false;\n            break;\n          case BUCKETS.OPEN_FOR_REGISTRATION:\n            otherState.allOpenChallengesLoaded = true;\n            otherState.gettingMoreOpenChallenges = false;\n            break;\n          case BUCKETS.ONGOING:\n            otherState.allOnGoingChallengesLoaded = true;\n            otherState.gettingMoreOnGoingChallenges = false;\n            break;\n          default:\n            break;\n        }\n      }\n      break;\n    default:\n      break;\n  }\n\n  var meta = newMeta || state.meta;\n\n  return (0, _extends4.default)({}, state, {\n    challenges: newChallenges\n  }, otherState, {\n    meta: meta,\n    lastUpdateOfActiveChallenges: Date.now(),\n    lastRequestedPageOfActiveChallenges: -1,\n    loadingRestActiveChallengesUUID: ''\n  });\n}\n\n/**\n * Handles CHALLENGE_LISTING/GET_CHALLENGE_SUBTRACKS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onGetChallengeSubtracksDone(state, action) {\n  if (action.error) _utils.logger.error(action.payload);\n  return (0, _extends4.default)({}, state, {\n    challengeSubtracks: action.error ? [] : action.payload,\n    challengeSubtracksMap: action.error ? {} : _lodash2.default.keyBy(action.payload, 'subTrack'),\n    loadingChallengeSubtracks: false\n  });\n}\n\n/**\n * Handles CHALLENGE_LISTING/GET_CHALLENGE_TAGS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onGetChallengeTagsDone(state, action) {\n  if (action.error) _utils.logger.error(action.payload);\n  return (0, _extends4.default)({}, state, {\n    challengeTags: action.error ? [] : action.payload,\n    loadingChallengeTags: false\n  });\n}\n\nfunction onGetPastChallengesInit(state, action) {\n  var _action$payload = action.payload,\n      frontFilter = _action$payload.frontFilter,\n      page = _action$payload.page,\n      uuid = _action$payload.uuid;\n\n  var tracks = frontFilter && frontFilter.tracks;\n  if (tracks && _lodash2.default.isEmpty(tracks)) {\n    return (0, _extends4.default)({}, state, {\n      allPastChallengesLoaded: true,\n      loadingPastChallengesUUID: ''\n    });\n  }\n\n  return (0, _extends4.default)({}, state, {\n    lastRequestedPageOfPastChallenges: page,\n    loadingPastChallengesUUID: uuid\n  });\n}\n\nfunction onGetPastChallengesDone(state, _ref7) {\n  var error = _ref7.error,\n      payload = _ref7.payload;\n\n  if (error) {\n    _utils.logger.error(payload);\n    return state;\n  }\n  var uuid = payload.uuid,\n      loaded = payload.challenges,\n      frontFilter = payload.frontFilter,\n      sort = payload.sort;\n\n  if (uuid !== state.loadingPastChallengesUUID) return state;\n\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  /* Fetching 0 page of past challenges also drops any past challenges\n   * loaded to the state before. */\n  var filter = state.lastRequestedPageOfPastChallenges ? function (item) {\n    return !ids.has(item.id);\n  } : function (item) {\n    return !ids.has(item.id) && item.status !== 'COMPLETED' && item.status !== 'PAST';\n  };\n\n  var pasts = processBucketData(null, state.challenges, loaded, BUCKETS.PAST, state.sorts, sort, filter, frontFilter);\n\n  var keepPastPlaceholders = false;\n  if (loaded.length) {\n    var ff = Filter.getFilterFunction(frontFilter);\n    keepPastPlaceholders = pasts.filter(ff).length - (_lodash2.default.has(state.challenges, BUCKETS.PAST) ? state.challenges[BUCKETS.PAST].filter(ff).length : 0) < 10;\n  }\n\n  var newChallenges = _lodash2.default.cloneDeep(state.challenges);\n  newChallenges[BUCKETS.PAST] = pasts;\n\n  return (0, _extends4.default)({}, state, {\n    allPastChallengesLoaded: loaded.length === 0,\n    challenges: newChallenges,\n    keepPastPlaceholders: keepPastPlaceholders,\n    loadingPastChallengesUUID: ''\n  });\n}\n\nfunction onSelectCommunity(state, _ref8) {\n  var payload = _ref8.payload;\n\n  (0, _url.updateQuery)({ communityId: payload || undefined });\n  return (0, _extends4.default)({}, state, {\n    selectedCommunityId: payload,\n\n    /* Page numbers of past/upcoming challenges depend on the filters. To keep\n      * the code simple we just reset them each time a filter is modified.\n      * (This community selection defines community-specific filter for\n      * challenges). */\n    allPastChallengesLoaded: false,\n    lastRequestedPageOfPastChallenges: -1\n  });\n}\n\n/**\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onSetFilter(state, _ref9) {\n  var payload = _ref9.payload;\n\n  /* Validation of filter parameters: they may come from URL query, thus\n   * validation is not a bad idea. As you may note, at the moment we do not\n   * do it very carefully (many params are not validated). */\n  var filter = _lodash2.default.clone(payload);\n  if (_lodash2.default.isPlainObject(filter.tags)) {\n    filter.tags = _lodash2.default.values(filter.tags);\n  }\n  if (_lodash2.default.isPlainObject(filter.subtracks)) {\n    filter.subtracks = _lodash2.default.values(filter.subtracks);\n  }\n  if (filter.startDate && !(0, _moment2.default)(filter.startDate).isValid()) {\n    delete filter.startDate;\n  }\n  if (filter.endDate && !(0, _moment2.default)(filter.endDate).isValid()) {\n    delete filter.endDate;\n  }\n\n  /* Update of URL and generation of the state. */\n  (0, _url.updateQuery)({ filter: filter });\n  return (0, _extends4.default)({}, state, {\n    filter: filter,\n\n    /* Page numbers of past/upcoming challenges depend on the filters. To keep\n     * the code simple we just reset them each time a filter is modified. */\n    allPastChallengesLoaded: false,\n    lastRequestedPageOfPastChallenges: -1\n  });\n}\n\n/**\n * Handles CHALLENGE_LISTING/GET_REVIEW_OPPORTUNITIES_INIT action.\n * @param {Object} state\n * @param {Object} action Payload will be page, uuid\n * @return {Object} New state\n */\nfunction onGetReviewOpportunitiesInit(state, _ref10) {\n  var payload = _ref10.payload;\n\n  return (0, _extends4.default)({}, state, {\n    lastRequestedPageOfReviewOpportunities: payload.page,\n    loadingReviewOpportunitiesUUID: payload.uuid\n  });\n}\n\n/**\n * Handles CHALLENGE_LISTING/GET_REVIEW_OPPORTUNITIES_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call and UUID\n * @return {Object} New state\n */\nfunction onGetReviewOpportunitiesDone(state, _ref11) {\n  var payload = _ref11.payload,\n      error = _ref11.error;\n\n  if (error) {\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      loaded = payload.loaded,\n      sort = payload.sort,\n      frontFilter = payload.frontFilter;\n\n\n  if (uuid !== state.loadingReviewOpportunitiesUUID) return state;\n\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  var filter = function filter(item) {\n    return !ids.has(item.id);\n  };\n\n  var reviewOpportunities = processBucketData(null, state, loaded, BUCKETS.REVIEW_OPPORTUNITIES, state.sorts, sort, filter, frontFilter);\n\n  return (0, _extends4.default)({}, state, {\n    reviewOpportunities: reviewOpportunities,\n    loadingReviewOpportunitiesUUID: '',\n    allReviewOpportunitiesLoaded: loaded.length === 0\n  });\n}\n\n/**\n * Inits the loading of SRMs.\n * @param {Object} state\n * @param {String} payload Operation UUID.\n * @return {Object} New state.\n */\nfunction onGetSrmsInit(state, _ref12) {\n  var payload = _ref12.payload;\n\n  return (0, _extends4.default)({}, state, {\n    srms: (0, _extends4.default)({}, state.srms, {\n      loadingUuid: payload\n    })\n  });\n}\n\n/**\n * Handles loaded SRMs.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetSrmsDone(state, _ref13) {\n  var error = _ref13.error,\n      payload = _ref13.payload;\n\n  if (error) {\n    _utils.logger.error('Failed to load SRMs', payload);\n    fireErrorMessage('Failed to load SRMs', '');\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      data = payload.data;\n\n  if (state.srms.loadingUuid !== uuid) return state;\n  return (0, _extends4.default)({}, state, {\n    srms: {\n      data: data,\n      loadingUuid: '',\n      timestamp: Date.now()\n    }\n  });\n}\n\n/**\n * Creates a new Challenge Listing reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return Challenge Listing reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _challengeListing2.default.challengeListing;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.dropChallenges, function (state, _ref14) {\n    var payload = _ref14.payload;\n    var bucket = payload.bucket;\n\n    var otherState = {};\n    switch (bucket) {\n      case BUCKETS.REVIEW_OPPORTUNITIES:\n        otherState.lastRequestedPageOfReviewOpportunities = -1;\n        otherState.reviewOpportunities = [];\n        otherState.allReviewOpportunitiesLoaded = false;\n        break;\n      case BUCKETS.PAST:\n        otherState.challenges = _lodash2.default.cloneDeep(state.challenges);\n        otherState.lastRequestedPageOfPastChallenges = -1;\n        otherState.challenges.past = [];\n        otherState.allPastChallengesLoaded = false;\n        break;\n      default:\n        otherState.challenges = {};\n        otherState.allMyChallengesLoaded = false;\n        otherState.allOnGoingChallengesLoaded = false;\n        otherState.allOpenChallengesLoaded = false;\n        otherState.allActiveChallengesLoaded = false;\n        otherState.allPastChallengesLoaded = false;\n        otherState.allReviewOpportunitiesLoaded = false;\n        otherState.lastRequestedPageOfActiveChallenges = -1;\n        otherState.lastRequestedPageOfMyChallenges = -1;\n        otherState.lastRequestedPageOfOpenChallenges = -1;\n        otherState.lastRequestedPageOfOnGoingChallenges = -1;\n        otherState.lastRequestedPageOfPastChallenges = -1;\n        otherState.lastRequestedPageOfReviewOpportunities = -1;\n        otherState.lastUpdateOfActiveChallenges = -1;\n        otherState.loadingActiveChallengesUUID = '';\n        otherState.loadingMyChallengesUUID = '';\n        otherState.loadingOpenChallengesUUID = '';\n        otherState.loadingOnGoingChallengesUUID = '';\n        otherState.loadingRestActiveChallengesUUID = '';\n        otherState.loadingPastChallengesUUID = '';\n        otherState.loadingReviewOpportunitiesUUID = '';\n        otherState.reviewOpportunities = [];\n        otherState.meta = {\n          allChallengesCount: 0,\n          myChallengesCount: 0,\n          ongoingChallengesCount: 0,\n          openChallengesCount: 0,\n          totalCount: 0\n        };\n        break;\n    }\n\n    return (0, _extends4.default)({}, state, otherState);\n  }), (0, _defineProperty3.default)(_handleActions, a.getMoreChallenges, function (state, _ref15) {\n    var payload = _ref15.payload;\n    var bucket = payload.bucket;\n\n    var otherState = {};\n    switch (bucket) {\n      case BUCKETS.MY:\n        otherState.gettingMoreMyChallenges = true;\n        break;\n      case BUCKETS.ONGOING:\n        otherState.gettingMoreOnGoingChallenges = true;\n        break;\n      case BUCKETS.OPEN_FOR_REGISTRATION:\n        otherState.gettingMoreOpenChallenges = true;\n        break;\n      default:\n        break;\n    }\n    return (0, _extends4.default)({}, state, otherState);\n  }), (0, _defineProperty3.default)(_handleActions, a.expandTag, function (state, _ref16) {\n    var payload = _ref16.payload;\n    return (0, _extends4.default)({}, state, {\n      expandedTags: [].concat((0, _toConsumableArray3.default)(state.expandedTags), [payload])\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.getAllActiveChallengesInit, onGetAllActiveChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getAllActiveChallengesDone, onGetAllActiveChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesInit, onGetActiveChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesDone, onGetActiveChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getRestActiveChallengesInit, onGetRestActiveChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getRestActiveChallengesDone, onGetRestActiveChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getChallengeSubtracksInit, function (state) {\n    return (0, _extends4.default)({}, state, {\n      loadingChallengeSubtracks: true\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.getChallengeSubtracksDone, onGetChallengeSubtracksDone), (0, _defineProperty3.default)(_handleActions, a.getChallengeTagsInit, function (state) {\n    return (0, _extends4.default)({}, state, {\n      loadingChallengeTags: true\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.getChallengeTagsDone, onGetChallengeTagsDone), (0, _defineProperty3.default)(_handleActions, a.getPastChallengesInit, onGetPastChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getPastChallengesDone, onGetPastChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getReviewOpportunitiesInit, onGetReviewOpportunitiesInit), (0, _defineProperty3.default)(_handleActions, a.getReviewOpportunitiesDone, onGetReviewOpportunitiesDone), (0, _defineProperty3.default)(_handleActions, a.getSrmsInit, onGetSrmsInit), (0, _defineProperty3.default)(_handleActions, a.getSrmsDone, onGetSrmsDone), (0, _defineProperty3.default)(_handleActions, a.selectCommunity, onSelectCommunity), (0, _defineProperty3.default)(_handleActions, a.setFilter, onSetFilter), (0, _defineProperty3.default)(_handleActions, a.setSort, function (state, _ref17) {\n    var payload = _ref17.payload;\n\n    var otherState = {};\n    switch (payload.bucket) {\n      case BUCKETS.PAST:\n        otherState.lastRequestedPageOfPastChallenges = -1;\n        break;\n      case BUCKETS.MY:\n      case BUCKETS.OPEN_FOR_REGISTRATION:\n      case BUCKETS.ONGOING:\n        otherState.lastRequestedPageOfActiveChallenges = -1;\n        break;\n      case BUCKETS.REVIEW_OPPORTUNITIES:\n        otherState.lastRequestedPageOfReviewOpportunities = -1;\n        break;\n      default:\n        break;\n    }\n    return (0, _extends4.default)({}, state, otherState, {\n      sorts: (0, _extends4.default)({}, state.sorts, (0, _defineProperty3.default)({}, payload.bucket, payload.sort))\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.setDatePickerStatus, function (state, _ref18) {\n    var payload = _ref18.payload;\n    var status = payload.status;\n\n    return (0, _extends4.default)({}, state, {\n      datepickerOpen: status\n    });\n  }), _handleActions), _lodash2.default.defaults(_lodash2.default.clone(initialState) || {}, {\n    allMyChallengesLoaded: false,\n    allOnGoingChallengesLoaded: false,\n    allOpenChallengesLoaded: false,\n    allActiveChallengesLoaded: false,\n    allPastChallengesLoaded: false,\n    allReviewOpportunitiesLoaded: false,\n\n    challenges: {},\n    challengeSubtracks: [],\n    challengeSubtracksMap: {},\n    challengeTags: [],\n\n    expandedTags: [],\n\n    gettingMoreChallenges: false,\n    gettingMoreMyChallenges: false,\n    gettingMoreOnGoingChallenges: false,\n    gettingMoreOpenChallenges: false,\n\n    filter: {},\n\n    keepPastPlaceholders: false,\n\n    lastRequestedPageOfActiveChallenges: -1,\n    lastRequestedPageOfMyChallenges: -1,\n    lastRequestedPageOfOnGoingChallenges: -1,\n    lastRequestedPageOfOpenChallenges: -1,\n    lastRequestedPageOfPastChallenges: -1,\n    lastRequestedPageOfReviewOpportunities: -1,\n    lastUpdateOfActiveChallenges: 0,\n\n    loadingActiveChallengesUUID: '',\n    loadingMyChallengesUUID: '',\n    loadingOnGoingChallengesUUID: '',\n    loadingOpenChallengesUUID: '',\n    loadingRestActiveChallengesUUID: '',\n    loadingPastChallengesUUID: '',\n    loadingReviewOpportunitiesUUID: '',\n\n    loadingChallengeSubtracks: false,\n    loadingChallengeTags: false,\n\n    reviewOpportunities: [],\n\n    selectedCommunityId: '',\n\n    sorts: {},\n\n    srms: {\n      data: [],\n      loadingUuid: '',\n      timestamp: 0\n    },\n\n    meta: {\n      allChallengesCount: 0,\n      myChallengesCount: 0,\n      ongoingChallengesCount: 0,\n      openChallengesCount: 0,\n      totalCount: 0\n    },\n\n    datepickerOpen: false\n  }));\n}\n\n/**\n * The factory creates the new reducer with initial state tailored to the given\n * ExpressJS HTTP request, if specified (for server-side rendering). If no HTTP\n * request is specified, it creates the default reducer.\n * @return {Promise} Resolves to the new reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/* Default reducer with empty initial state. */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(fireErrorMessage, 'fireErrorMessage', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(Filter, 'Filter', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(BUCKETS, 'BUCKETS', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(BUCKET_DATA, 'BUCKET_DATA', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(getBuckets, 'getBuckets', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(processBucketData, 'processBucketData', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(checkAllLoaded, 'checkAllLoaded', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetAllActiveChallengesInit, 'onGetAllActiveChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetAllActiveChallengesDone, 'onGetAllActiveChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetActiveChallengesDone, 'onGetActiveChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetActiveChallengesInit, 'onGetActiveChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetRestActiveChallengesInit, 'onGetRestActiveChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetRestActiveChallengesDone, 'onGetRestActiveChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetChallengeSubtracksDone, 'onGetChallengeSubtracksDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetChallengeTagsDone, 'onGetChallengeTagsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetPastChallengesInit, 'onGetPastChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetPastChallengesDone, 'onGetPastChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onSelectCommunity, 'onSelectCommunity', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onSetFilter, 'onSetFilter', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetReviewOpportunitiesInit, 'onGetReviewOpportunitiesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetReviewOpportunitiesDone, 'onGetReviewOpportunitiesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetSrmsInit, 'onGetSrmsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetSrmsDone, 'onGetSrmsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge-listing.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/challenge-listing.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _set = __webpack_require__(/*! babel-runtime/core-js/set */ \"babel-runtime/core-js/set\");\n\nvar _set2 = _interopRequireDefault(_set);\n\nvar _extends3 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends4 = _interopRequireDefault(_extends3);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _url = __webpack_require__(/*! ../utils/url */ \"./src/utils/url.js\");\n\nvar _sort = __webpack_require__(/*! ../utils/challenge/sort */ \"./src/utils/challenge/sort.js\");\n\nvar _challengeListing = __webpack_require__(/*! ../actions/challenge-listing */ \"./src/actions/challenge-listing.js\");\n\nvar _challengeListing2 = _interopRequireDefault(_challengeListing);\n\nvar _utils = __webpack_require__(/*! ../utils */ \"./src/utils/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Reducer for state.challengeListing.\n       */\n\nvar fireErrorMessage = _utils.errors.fireErrorMessage;\nvar Filter = _utils.challenge.filter;\nvar _challengeUtils$bucke = _utils.challenge.buckets,\n    BUCKETS = _challengeUtils$bucke.BUCKETS,\n    BUCKET_DATA = _challengeUtils$bucke.BUCKET_DATA,\n    getBuckets = _challengeUtils$bucke.getBuckets;\n\n/**\n * Process challenge data for bucket\n * @param handle user handle\n * @param challenges all challenges\n * @param loaded fetched challenges of bucket\n * @param bucket bucket name\n * @param sorts all sorts data\n * @param sort sort name\n * @param filter filter object\n * @param frontFilter filter object\n */\n\nfunction processBucketData(handle, challenges, loaded, bucket, sorts, sort, filter, frontFilter) {\n  var buckets = _lodash2.default.isEmpty(handle) ? BUCKET_DATA : getBuckets(handle);\n  var data = _lodash2.default.has(challenges, bucket) ? challenges[bucket].filter(filter).concat(loaded) : _lodash2.default.clone(loaded);\n\n  var finalFilters = (0, _extends4.default)({}, frontFilter, buckets[bucket].filter);\n\n  var bucketFilter = bucket !== BUCKETS.REVIEW_OPPORTUNITIES ? Filter.getFilterFunction(finalFilters) : Filter.getReviewOpportunitiesFilterFunction(finalFilters);\n  var filteredData = [];\n  for (var i = 0; i < data.length; i += 1) {\n    if (bucketFilter(data[i])) {\n      filteredData.push(data[i]);\n    }\n  }\n\n  if (bucket !== BUCKETS.ALL) {\n    if (!_lodash2.default.isEmpty(sort)) {\n      filteredData.sort(_sort.SORTS_DATA[sort].func);\n      return filteredData;\n    }\n\n    if (_lodash2.default.has(sorts, bucket)) {\n      filteredData.sort(_sort.SORTS_DATA[sorts[bucket]].func);\n    } else {\n      filteredData.sort(_sort.SORTS_DATA[BUCKET_DATA[bucket].sorts[0]].func);\n    }\n  }\n\n  return filteredData;\n}\n\n/**\n * Check the challenges of bucket have been loaded all\n * @param challenges all challenges\n * @param bucket bucket name\n * @param loaded loaded challenges this time\n * @param data processed data\n * @returns {boolean}\n */\nfunction checkAllLoaded(challenges, bucket, loaded, data) {\n  var isAll = false;\n  if (loaded.length === 0) {\n    isAll = true;\n  } else if (!_lodash2.default.isEmpty(_lodash2.default.get(challenges, bucket)) && challenges[bucket].length === data.length) {\n    isAll = true;\n  }\n\n  return isAll;\n}\n\n/** TODO: Inspect if the 2 actions bellow can be removed?\n * They do  duplicate what is done in `getActiveChallengesDone` but fetch all challenges\n * which was refactored in listing-improve\n */\nfunction onGetAllActiveChallengesInit(state, _ref) {\n  var payload = _ref.payload;\n\n  return (0, _extends4.default)({}, state, { loadingActiveChallengesUUID: payload });\n}\nfunction onGetAllActiveChallengesDone(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  if (error) {\n    _utils.logger.error(payload);\n    return state;\n  }\n  var uuid = payload.uuid,\n      loaded = payload.challenges,\n      handle = payload.handle;\n\n  if (uuid !== state.loadingActiveChallengesUUID) return state;\n  /* Once all active challenges are fetched from the API, we remove from the\n   * store any active challenges stored there previously, and also any\n   * challenges with IDs matching any challenges loaded now as active. */\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  var filter = function filter(item) {\n    return !ids.has(item.id) && item.status !== 'ACTIVE';\n  };\n  // BUCKET.MY\n  var my = processBucketData(handle, state.challenges, loaded, BUCKETS.MY, null, null, filter, {});\n  // BUCKET.ALL\n  var all = processBucketData(handle, state.challenges, loaded, BUCKETS.ALL, null, null, filter, {});\n\n  var newChallenges = _lodash2.default.cloneDeep(state.challenges);\n  newChallenges[BUCKETS.ALL] = all;\n  newChallenges[BUCKETS.MY] = my;\n\n  return (0, _extends4.default)({}, state, {\n    challenges: newChallenges,\n    lastUpdateOfActiveChallenges: Date.now(),\n    loadingActiveChallengesUUID: ''\n  });\n}\n\n/**\n * Called when 1st page of ative challenges is loaded from `/challenges` api\n * @param {*} state\n * @param {*} param1\n */\nfunction onGetActiveChallengesDone(state, _ref3) {\n  var error = _ref3.error,\n      payload = _ref3.payload;\n\n  if (error) {\n    _utils.logger.error(payload);\n    return state;\n  }\n  var uuid = payload.uuid,\n      loaded = payload.challenges,\n      sort = payload.sort,\n      bucket = payload.bucket,\n      tokenV3 = payload.tokenV3,\n      handle = payload.handle,\n      frontFilter = payload.frontFilter,\n      meta = payload.meta;\n\n  /* Once all active challenges are fetched from the API, we remove from the\n   * store any active challenges stored there previously, and also any\n   * challenges with IDs matching any challenges loaded now as active. */\n\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  var filter = void 0;\n  var newChallenges = {};\n  var otherState = {};\n  switch (bucket) {\n    case BUCKETS.ALL:\n      {\n        if (uuid !== state.loadingActiveChallengesUUID) return state;\n        /* Fetching 0 page of active challenges also drops any active challenges\n        * loaded to the state before. */\n        filter = state.lastRequestedPageOfActiveChallenges ? function (item) {\n          return !ids.has(item.id);\n        } : function (item) {\n          return !ids.has(item.id) && item.status !== 'ACTIVE';\n        };\n\n        // my\n        var my = !_lodash2.default.isEmpty(tokenV3) ? processBucketData(handle, state.challenges, loaded, BUCKETS.MY, state.sorts, sort, filter) : [];\n        // open for registration\n        var open = processBucketData(handle, state.challenges, loaded, BUCKETS.OPEN_FOR_REGISTRATION, state.sorts, sort, filter);\n        // ongoing\n        var ongoing = processBucketData(handle, state.challenges, loaded, BUCKETS.ONGOING, state.sorts, sort, filter);\n        newChallenges = _lodash2.default.clone(state.challenges);\n        newChallenges[BUCKETS.MY] = my;\n        newChallenges[BUCKETS.OPEN_FOR_REGISTRATION] = open;\n        newChallenges[BUCKETS.ONGOING] = ongoing;\n        otherState.loadingActiveChallengesUUID = '';\n        otherState.meta = _lodash2.default.clone(meta);\n      }\n      break;\n    case BUCKETS.MY:\n      {\n        if (uuid !== state.loadingMyChallengesUUID) return state;\n        /* Fetching 0 page of active challenges also drops any active challenges\n        * loaded to the state before. */\n        filter = state.lastRequestedPageOfMyChallenges ? function (item) {\n          return !ids.has(item.id);\n        } : function (item) {\n          return !ids.has(item.id) && item.status !== 'ACTIVE';\n        };\n\n        var data = processBucketData(handle, state.challenges, loaded, bucket, state.sorts, sort, filter);\n        newChallenges = _lodash2.default.cloneDeep(state.challenges);\n        newChallenges[bucket] = data;\n        otherState.loadingMyChallengesUUID = '';\n        otherState.allMyChallengesLoaded = checkAllLoaded(state.challenges, bucket, loaded, data);\n        otherState.gettingMoreMyChallenges = !otherState.allMyChallengesLoaded;\n        otherState.meta = _lodash2.default.clone(meta);\n        /* TODO Due to the meta of backend response is currently not correct,\n        /* so should update counts after fetch all challenges of bucket */\n        if (_lodash2.default.get(meta, 'myChallengesCount') !== data.length && otherState.allMyChallengesLoaded) {\n          otherState.meta.myChallengesCount = data.length;\n          otherState.meta.allChallengesCount = meta.allChallengesCount + data.length - meta.myChallengesCount;\n        }\n      }\n      break;\n    case BUCKETS.OPEN_FOR_REGISTRATION:\n      {\n        if (uuid !== state.loadingOpenChallengesUUID) return state;\n        /* Fetching 0 page of active challenges also drops any active challenges\n        * loaded to the state before. */\n        filter = state.lastRequestedPageOfOpenChallenges ? function (item) {\n          return !ids.has(item.id);\n        } : function (item) {\n          return !ids.has(item.id) && item.status !== 'ACTIVE';\n        };\n\n        var _data = processBucketData(handle, state.challenges, loaded, bucket, state.sorts, sort, filter);\n\n        newChallenges = _lodash2.default.cloneDeep(state.challenges);\n        newChallenges[bucket] = _data;\n        otherState.loadingOpenChallengesUUID = '';\n        otherState.allOpenChallengesLoaded = checkAllLoaded(state.challenges, bucket, loaded, _data);\n        otherState.gettingMoreOpenChallenges = !otherState.allOpenChallengesLoaded;\n        otherState.meta = _lodash2.default.clone(meta);\n        /* TODO Due to the meta of backend response is currently not correct,\n        /* so should update counts after fetch all challenges of bucket */\n        if (_lodash2.default.get(meta, 'openChallengesCount') !== _data.length && otherState.allOpenChallengesLoaded) {\n          otherState.meta.openChallengesCount = _data.length;\n          otherState.meta.allChallengesCount = meta.allChallengesCount + _data.length - meta.openChallengesCount;\n        }\n      }\n      break;\n    case BUCKETS.ONGOING:\n      {\n        if (uuid !== state.loadingOnGoingChallengesUUID) return state;\n        /* Fetching 0 page of active challenges also drops any active challenges\n        * loaded to the state before. */\n        filter = state.lastRequestedPageOfOnGoingChallenges ? function (item) {\n          return !ids.has(item.id);\n        } : function (item) {\n          return !ids.has(item.id) && item.status !== 'ACTIVE';\n        };\n\n        var _data2 = processBucketData(handle, state.challenges, loaded, bucket, state.sorts, sort, filter);\n        newChallenges = _lodash2.default.cloneDeep(state.challenges);\n        newChallenges[bucket] = _data2;\n        otherState.loadingOnGoingChallengesUUID = '';\n        otherState.allOnGoingChallengesLoaded = checkAllLoaded(state.challenges, bucket, loaded, _data2);\n        otherState.gettingMoreOnGoingChallenges = !otherState.allOnGoingChallengesLoaded;\n        /* TODO Due to the meta of backend response is currently not correct,\n        /* so should update counts after fetch all challenges of bucket */\n        otherState.meta = _lodash2.default.clone(meta);\n        if (_lodash2.default.get(meta, 'ongoingChallengesCount') !== _data2.length && otherState.allOnGoingChallengesLoaded) {\n          otherState.meta.ongoingChallengesCount = _data2.length;\n          otherState.meta.allChallengesCount = meta.allChallengesCount + _data2.length - meta.ongoingChallengesCount;\n        }\n      }\n      break;\n    default:\n      break;\n  }\n\n  // all challenges used for other components like sub communities\n  newChallenges[BUCKETS.ALL] = processBucketData(handle, state.challenges, loaded, BUCKETS.ALL, null, null, filter, frontFilter);\n\n  return (0, _extends4.default)({}, state, otherState, {\n    challenges: newChallenges,\n    lastUpdateOfActiveChallenges: Date.now()\n  });\n}\n\n/**\n * Called when loading of 1st page of active challenges is started\n * @param {*} state\n * @param {*} param1\n */\nfunction onGetActiveChallengesInit(state, _ref4) {\n  var payload = _ref4.payload;\n  var page = payload.page,\n      bucket = payload.bucket,\n      uuid = payload.uuid;\n\n  var otherState = {};\n  switch (bucket) {\n    case BUCKETS.ALL:\n      otherState.loadingActiveChallengesUUID = uuid;\n      otherState.lastRequestedPageOfActiveChallenges = page;\n      break;\n    case BUCKETS.MY:\n      otherState.loadingMyChallengesUUID = uuid;\n      otherState.lastRequestedPageOfMyChallenges = page;\n      break;\n    case BUCKETS.OPEN_FOR_REGISTRATION:\n      otherState.loadingOpenChallengesUUID = uuid;\n      otherState.lastRequestedPageOfOpenChallenges = page;\n      break;\n    case BUCKETS.ONGOING:\n      otherState.loadingOnGoingChallengesUUID = uuid;\n      otherState.lastRequestedPageOfOnGoingChallenges = page;\n      break;\n    default:\n      break;\n  }\n\n  return (0, _extends4.default)({}, state, otherState);\n}\nfunction onGetRestActiveChallengesInit(state, _ref5) {\n  var payload = _ref5.payload;\n\n  return (0, _extends4.default)({}, state, {\n    loadingRestActiveChallengesUUID: payload.uuid\n  });\n}\n\n/**\n * Called when all challenges are loaded\n * @param {*} state\n * @param {*} param1\n */\nfunction onGetRestActiveChallengesDone(state, _ref6) {\n  var error = _ref6.error,\n      payload = _ref6.payload;\n\n  if (error) {\n    _utils.logger.error(payload);\n    return state;\n  }\n  var uuid = payload.uuid,\n      loaded = payload.challenges,\n      newMeta = payload.meta,\n      sort = payload.sort,\n      bucket = payload.bucket,\n      handle = payload.handle,\n      frontFilter = payload.frontFilter;\n\n  if (uuid !== state.loadingRestActiveChallengesUUID) return state;\n\n  /* Once all active challenges are fetched from the API, we remove from the\n   * store any active challenges stored there previously, and also any\n   * challenges with IDs matching any challenges loaded now as active. */\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  /* Fetching 0 page of active challenges also drops any active challenges\n   * loaded to the state before. */\n  var filter = function filter(item) {\n    return !ids.has(item.id);\n  };\n\n  var otherState = {};\n  var newChallenges = {};\n  switch (bucket) {\n    case BUCKETS.MY:\n    case BUCKETS.OPEN_FOR_REGISTRATION:\n    case BUCKETS.ONGOING:\n      {\n        var data = processBucketData(handle, state.challenges, loaded, bucket, state.sorts, sort, filter, frontFilter);\n        newChallenges = _lodash2.default.cloneDeep(state.challenges);\n        newChallenges[bucket] = data;\n        switch (bucket) {\n          case BUCKETS.MY:\n            otherState.allMyChallengesLoaded = true;\n            otherState.gettingMoreMyChallenges = false;\n            break;\n          case BUCKETS.OPEN_FOR_REGISTRATION:\n            otherState.allOpenChallengesLoaded = true;\n            otherState.gettingMoreOpenChallenges = false;\n            break;\n          case BUCKETS.ONGOING:\n            otherState.allOnGoingChallengesLoaded = true;\n            otherState.gettingMoreOnGoingChallenges = false;\n            break;\n          default:\n            break;\n        }\n      }\n      break;\n    default:\n      break;\n  }\n\n  var meta = newMeta || state.meta;\n\n  return (0, _extends4.default)({}, state, {\n    challenges: newChallenges\n  }, otherState, {\n    meta: meta,\n    lastUpdateOfActiveChallenges: Date.now(),\n    lastRequestedPageOfActiveChallenges: -1,\n    loadingRestActiveChallengesUUID: ''\n  });\n}\n\n/**\n * Handles CHALLENGE_LISTING/GET_CHALLENGE_SUBTRACKS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onGetChallengeSubtracksDone(state, action) {\n  if (action.error) _utils.logger.error(action.payload);\n  return (0, _extends4.default)({}, state, {\n    challengeSubtracks: action.error ? [] : action.payload,\n    challengeSubtracksMap: action.error ? {} : _lodash2.default.keyBy(action.payload, 'subTrack'),\n    loadingChallengeSubtracks: false\n  });\n}\n\n/**\n * Handles CHALLENGE_LISTING/GET_CHALLENGE_TAGS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onGetChallengeTagsDone(state, action) {\n  if (action.error) _utils.logger.error(action.payload);\n  return (0, _extends4.default)({}, state, {\n    challengeTags: action.error ? [] : action.payload,\n    loadingChallengeTags: false\n  });\n}\n\nfunction onGetPastChallengesInit(state, action) {\n  var _action$payload = action.payload,\n      frontFilter = _action$payload.frontFilter,\n      page = _action$payload.page,\n      uuid = _action$payload.uuid;\n\n  var tracks = frontFilter && frontFilter.tracks;\n  if (tracks && _lodash2.default.isEmpty(tracks)) {\n    return (0, _extends4.default)({}, state, {\n      allPastChallengesLoaded: true,\n      loadingPastChallengesUUID: ''\n    });\n  }\n\n  return (0, _extends4.default)({}, state, {\n    lastRequestedPageOfPastChallenges: page,\n    loadingPastChallengesUUID: uuid\n  });\n}\n\nfunction onGetPastChallengesDone(state, _ref7) {\n  var error = _ref7.error,\n      payload = _ref7.payload;\n\n  if (error) {\n    _utils.logger.error(payload);\n    return state;\n  }\n  var uuid = payload.uuid,\n      loaded = payload.challenges,\n      frontFilter = payload.frontFilter,\n      sort = payload.sort;\n\n  if (uuid !== state.loadingPastChallengesUUID) return state;\n\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  /* Fetching 0 page of past challenges also drops any past challenges\n   * loaded to the state before. */\n  var filter = state.lastRequestedPageOfPastChallenges ? function (item) {\n    return !ids.has(item.id);\n  } : function (item) {\n    return !ids.has(item.id) && item.status !== 'COMPLETED' && item.status !== 'PAST';\n  };\n\n  var pasts = processBucketData(null, state.challenges, loaded, BUCKETS.PAST, state.sorts, sort, filter, frontFilter);\n\n  var keepPastPlaceholders = false;\n  if (loaded.length) {\n    var ff = Filter.getFilterFunction(frontFilter);\n    keepPastPlaceholders = pasts.filter(ff).length - (_lodash2.default.has(state.challenges, BUCKETS.PAST) ? state.challenges[BUCKETS.PAST].filter(ff).length : 0) < 10;\n  }\n\n  var newChallenges = _lodash2.default.cloneDeep(state.challenges);\n  newChallenges[BUCKETS.PAST] = pasts;\n\n  return (0, _extends4.default)({}, state, {\n    allPastChallengesLoaded: loaded.length === 0,\n    challenges: newChallenges,\n    keepPastPlaceholders: keepPastPlaceholders,\n    loadingPastChallengesUUID: ''\n  });\n}\n\nfunction onSelectCommunity(state, _ref8) {\n  var payload = _ref8.payload;\n\n  (0, _url.updateQuery)({ communityId: payload || undefined });\n  return (0, _extends4.default)({}, state, {\n    selectedCommunityId: payload,\n\n    /* Page numbers of past/upcoming challenges depend on the filters. To keep\n      * the code simple we just reset them each time a filter is modified.\n      * (This community selection defines community-specific filter for\n      * challenges). */\n    allPastChallengesLoaded: false,\n    lastRequestedPageOfPastChallenges: -1\n  });\n}\n\n/**\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onSetFilter(state, _ref9) {\n  var payload = _ref9.payload;\n\n  /* Validation of filter parameters: they may come from URL query, thus\n   * validation is not a bad idea. As you may note, at the moment we do not\n   * do it very carefully (many params are not validated). */\n  var filter = _lodash2.default.clone(payload);\n  if (_lodash2.default.isPlainObject(filter.tags)) {\n    filter.tags = _lodash2.default.values(filter.tags);\n  }\n  if (_lodash2.default.isPlainObject(filter.subtracks)) {\n    filter.subtracks = _lodash2.default.values(filter.subtracks);\n  }\n  if (filter.startDate && !(0, _moment2.default)(filter.startDate).isValid()) {\n    delete filter.startDate;\n  }\n  if (filter.endDate && !(0, _moment2.default)(filter.endDate).isValid()) {\n    delete filter.endDate;\n  }\n\n  /* Update of URL and generation of the state. */\n  (0, _url.updateQuery)({ filter: filter });\n  return (0, _extends4.default)({}, state, {\n    filter: filter,\n\n    /* Page numbers of past/upcoming challenges depend on the filters. To keep\n     * the code simple we just reset them each time a filter is modified. */\n    allPastChallengesLoaded: false,\n    lastRequestedPageOfPastChallenges: -1\n  });\n}\n\n/**\n * Handles CHALLENGE_LISTING/GET_REVIEW_OPPORTUNITIES_INIT action.\n * @param {Object} state\n * @param {Object} action Payload will be page, uuid\n * @return {Object} New state\n */\nfunction onGetReviewOpportunitiesInit(state, _ref10) {\n  var payload = _ref10.payload;\n\n  return (0, _extends4.default)({}, state, {\n    lastRequestedPageOfReviewOpportunities: payload.page,\n    loadingReviewOpportunitiesUUID: payload.uuid\n  });\n}\n\n/**\n * Handles CHALLENGE_LISTING/GET_REVIEW_OPPORTUNITIES_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call and UUID\n * @return {Object} New state\n */\nfunction onGetReviewOpportunitiesDone(state, _ref11) {\n  var payload = _ref11.payload,\n      error = _ref11.error;\n\n  if (error) {\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      loaded = payload.loaded,\n      sort = payload.sort,\n      frontFilter = payload.frontFilter;\n\n\n  if (uuid !== state.loadingReviewOpportunitiesUUID) return state;\n\n  var ids = new _set2.default();\n  loaded.forEach(function (item) {\n    return ids.add(item.id);\n  });\n\n  var filter = function filter(item) {\n    return !ids.has(item.id);\n  };\n\n  var reviewOpportunities = processBucketData(null, state, loaded, BUCKETS.REVIEW_OPPORTUNITIES, state.sorts, sort, filter, frontFilter);\n\n  return (0, _extends4.default)({}, state, {\n    reviewOpportunities: reviewOpportunities,\n    loadingReviewOpportunitiesUUID: '',\n    allReviewOpportunitiesLoaded: loaded.length === 0\n  });\n}\n\n/**\n * Inits the loading of SRMs.\n * @param {Object} state\n * @param {String} payload Operation UUID.\n * @return {Object} New state.\n */\nfunction onGetSrmsInit(state, _ref12) {\n  var payload = _ref12.payload;\n\n  return (0, _extends4.default)({}, state, {\n    srms: (0, _extends4.default)({}, state.srms, {\n      loadingUuid: payload\n    })\n  });\n}\n\n/**\n * Handles loaded SRMs.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetSrmsDone(state, _ref13) {\n  var error = _ref13.error,\n      payload = _ref13.payload;\n\n  if (error) {\n    _utils.logger.error('Failed to load SRMs', payload);\n    fireErrorMessage('Failed to load SRMs', '');\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      data = payload.data;\n\n  if (state.srms.loadingUuid !== uuid) return state;\n  return (0, _extends4.default)({}, state, {\n    srms: {\n      data: data,\n      loadingUuid: '',\n      timestamp: Date.now()\n    }\n  });\n}\n\n/**\n * Creates a new Challenge Listing reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return Challenge Listing reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _challengeListing2.default.challengeListing;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.dropChallenges, function (state, _ref14) {\n    var payload = _ref14.payload;\n    var bucket = payload.bucket;\n\n    var otherState = {};\n    switch (bucket) {\n      case BUCKETS.REVIEW_OPPORTUNITIES:\n        otherState.lastRequestedPageOfReviewOpportunities = -1;\n        otherState.reviewOpportunities = [];\n        otherState.allReviewOpportunitiesLoaded = false;\n        break;\n      case BUCKETS.PAST:\n        otherState.challenges = _lodash2.default.cloneDeep(state.challenges);\n        otherState.lastRequestedPageOfPastChallenges = -1;\n        otherState.challenges.past = [];\n        otherState.allPastChallengesLoaded = false;\n        break;\n      default:\n        otherState.challenges = {};\n        otherState.allMyChallengesLoaded = false;\n        otherState.allOnGoingChallengesLoaded = false;\n        otherState.allOpenChallengesLoaded = false;\n        otherState.allActiveChallengesLoaded = false;\n        otherState.allPastChallengesLoaded = false;\n        otherState.allReviewOpportunitiesLoaded = false;\n        otherState.lastRequestedPageOfActiveChallenges = -1;\n        otherState.lastRequestedPageOfMyChallenges = -1;\n        otherState.lastRequestedPageOfOpenChallenges = -1;\n        otherState.lastRequestedPageOfOnGoingChallenges = -1;\n        otherState.lastRequestedPageOfPastChallenges = -1;\n        otherState.lastRequestedPageOfReviewOpportunities = -1;\n        otherState.lastUpdateOfActiveChallenges = -1;\n        otherState.loadingActiveChallengesUUID = '';\n        otherState.loadingMyChallengesUUID = '';\n        otherState.loadingOpenChallengesUUID = '';\n        otherState.loadingOnGoingChallengesUUID = '';\n        otherState.loadingRestActiveChallengesUUID = '';\n        otherState.loadingPastChallengesUUID = '';\n        otherState.loadingReviewOpportunitiesUUID = '';\n        otherState.reviewOpportunities = [];\n        otherState.meta = {\n          allChallengesCount: 0,\n          myChallengesCount: 0,\n          ongoingChallengesCount: 0,\n          openChallengesCount: 0,\n          totalCount: 0\n        };\n        break;\n    }\n\n    return (0, _extends4.default)({}, state, otherState);\n  }), (0, _defineProperty3.default)(_handleActions, a.getMoreChallenges, function (state, _ref15) {\n    var payload = _ref15.payload;\n    var bucket = payload.bucket;\n\n    var otherState = {};\n    switch (bucket) {\n      case BUCKETS.MY:\n        otherState.gettingMoreMyChallenges = true;\n        break;\n      case BUCKETS.ONGOING:\n        otherState.gettingMoreOnGoingChallenges = true;\n        break;\n      case BUCKETS.OPEN_FOR_REGISTRATION:\n        otherState.gettingMoreOpenChallenges = true;\n        break;\n      default:\n        break;\n    }\n    return (0, _extends4.default)({}, state, otherState);\n  }), (0, _defineProperty3.default)(_handleActions, a.expandTag, function (state, _ref16) {\n    var payload = _ref16.payload;\n    return (0, _extends4.default)({}, state, {\n      expandedTags: [].concat((0, _toConsumableArray3.default)(state.expandedTags), [payload])\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.getAllActiveChallengesInit, onGetAllActiveChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getAllActiveChallengesDone, onGetAllActiveChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesInit, onGetActiveChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesDone, onGetActiveChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getRestActiveChallengesInit, onGetRestActiveChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getRestActiveChallengesDone, onGetRestActiveChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getChallengeSubtracksInit, function (state) {\n    return (0, _extends4.default)({}, state, {\n      loadingChallengeSubtracks: true\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.getChallengeSubtracksDone, onGetChallengeSubtracksDone), (0, _defineProperty3.default)(_handleActions, a.getChallengeTagsInit, function (state) {\n    return (0, _extends4.default)({}, state, {\n      loadingChallengeTags: true\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.getChallengeTagsDone, onGetChallengeTagsDone), (0, _defineProperty3.default)(_handleActions, a.getPastChallengesInit, onGetPastChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getPastChallengesDone, onGetPastChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getReviewOpportunitiesInit, onGetReviewOpportunitiesInit), (0, _defineProperty3.default)(_handleActions, a.getReviewOpportunitiesDone, onGetReviewOpportunitiesDone), (0, _defineProperty3.default)(_handleActions, a.getSrmsInit, onGetSrmsInit), (0, _defineProperty3.default)(_handleActions, a.getSrmsDone, onGetSrmsDone), (0, _defineProperty3.default)(_handleActions, a.selectCommunity, onSelectCommunity), (0, _defineProperty3.default)(_handleActions, a.setFilter, onSetFilter), (0, _defineProperty3.default)(_handleActions, a.setSort, function (state, _ref17) {\n    var payload = _ref17.payload;\n\n    var otherState = {};\n    switch (payload.bucket) {\n      case BUCKETS.PAST:\n        otherState.lastRequestedPageOfPastChallenges = -1;\n        break;\n      case BUCKETS.MY:\n      case BUCKETS.OPEN_FOR_REGISTRATION:\n      case BUCKETS.ONGOING:\n        otherState.lastRequestedPageOfActiveChallenges = -1;\n        break;\n      case BUCKETS.REVIEW_OPPORTUNITIES:\n        otherState.lastRequestedPageOfReviewOpportunities = -1;\n        break;\n      default:\n        break;\n    }\n    return (0, _extends4.default)({}, state, otherState, {\n      sorts: (0, _extends4.default)({}, state.sorts, (0, _defineProperty3.default)({}, payload.bucket, payload.sort))\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.setDatePickerStatus, function (state, _ref18) {\n    var payload = _ref18.payload;\n    var status = payload.status;\n\n    return (0, _extends4.default)({}, state, {\n      datepickerOpen: status\n    });\n  }), _handleActions), _lodash2.default.defaults(_lodash2.default.clone(initialState) || {}, {\n    allMyChallengesLoaded: false,\n    allOnGoingChallengesLoaded: false,\n    allOpenChallengesLoaded: false,\n    allActiveChallengesLoaded: false,\n    allPastChallengesLoaded: false,\n    allReviewOpportunitiesLoaded: false,\n\n    challenges: {},\n    challengeSubtracks: [],\n    challengeSubtracksMap: {},\n    challengeTags: [],\n\n    expandedTags: [],\n\n    gettingMoreChallenges: false,\n    gettingMoreMyChallenges: false,\n    gettingMoreOnGoingChallenges: false,\n    gettingMoreOpenChallenges: false,\n\n    filter: {},\n\n    keepPastPlaceholders: false,\n\n    lastRequestedPageOfActiveChallenges: -1,\n    lastRequestedPageOfMyChallenges: -1,\n    lastRequestedPageOfOnGoingChallenges: -1,\n    lastRequestedPageOfOpenChallenges: -1,\n    lastRequestedPageOfPastChallenges: -1,\n    lastRequestedPageOfReviewOpportunities: -1,\n    lastUpdateOfActiveChallenges: 0,\n\n    loadingActiveChallengesUUID: '',\n    loadingMyChallengesUUID: '',\n    loadingOnGoingChallengesUUID: '',\n    loadingOpenChallengesUUID: '',\n    loadingRestActiveChallengesUUID: '',\n    loadingPastChallengesUUID: '',\n    loadingReviewOpportunitiesUUID: '',\n\n    loadingChallengeSubtracks: false,\n    loadingChallengeTags: false,\n\n    reviewOpportunities: [],\n\n    selectedCommunityId: '',\n\n    sorts: {},\n\n    srms: {\n      data: [],\n      loadingUuid: '',\n      timestamp: 0\n    },\n\n    meta: {\n      allChallengesCount: 0,\n      myChallengesCount: 0,\n      ongoingChallengesCount: 0,\n      openChallengesCount: 0,\n      totalCount: 0\n    },\n\n    datepickerOpen: false\n  }));\n}\n\n/**\n * The factory creates the new reducer with initial state tailored to the given\n * ExpressJS HTTP request, if specified (for server-side rendering). If no HTTP\n * request is specified, it creates the default reducer.\n * @return {Promise} Resolves to the new reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/* Default reducer with empty initial state. */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(fireErrorMessage, 'fireErrorMessage', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(Filter, 'Filter', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(BUCKETS, 'BUCKETS', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(BUCKET_DATA, 'BUCKET_DATA', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(getBuckets, 'getBuckets', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(processBucketData, 'processBucketData', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(checkAllLoaded, 'checkAllLoaded', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetAllActiveChallengesInit, 'onGetAllActiveChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetAllActiveChallengesDone, 'onGetAllActiveChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetActiveChallengesDone, 'onGetActiveChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetActiveChallengesInit, 'onGetActiveChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetRestActiveChallengesInit, 'onGetRestActiveChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetRestActiveChallengesDone, 'onGetRestActiveChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetChallengeSubtracksDone, 'onGetChallengeSubtracksDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetChallengeTagsDone, 'onGetChallengeTagsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetPastChallengesInit, 'onGetPastChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetPastChallengesDone, 'onGetPastChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onSelectCommunity, 'onSelectCommunity', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onSetFilter, 'onSetFilter', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetReviewOpportunitiesInit, 'onGetReviewOpportunitiesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetReviewOpportunitiesDone, 'onGetReviewOpportunitiesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetSrmsInit, 'onGetSrmsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(onGetSrmsDone, 'onGetSrmsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge-listing.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/challenge-listing.js?");
 
 /***/ }),
 
@@ -664,7 +664,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _challenge = __webpack_require__(/*! ../actions/challenge */ \"./src/actions/challenge.js\");\n\nvar _challenge2 = _interopRequireDefault(_challenge);\n\nvar _smp = __webpack_require__(/*! ../actions/smp */ \"./src/actions/smp.js\");\n\nvar _smp2 = _interopRequireDefault(_smp);\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nvar _mySubmissionsManagement = __webpack_require__(/*! ./my-submissions-management */ \"./src/reducers/my-submissions-management.js\");\n\nvar _mySubmissionsManagement2 = _interopRequireDefault(_mySubmissionsManagement);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.challenge\"\n       * @desc Reducer for {@link module:actions.challenge} actions.\n       *\n       * State segment managed by this reducer has the following strcuture:\n       * @todo Document the structure.\n       */\n\n/**\n * Handles CHALLENGE/GET_DETAILS_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state\n */\nfunction onGetDetailsInit(state, action) {\n  var challengeId = action.payload;\n  return state.details && _lodash2.default.toString(state.details.id) !== challengeId ? (0, _extends3.default)({}, state, {\n    fetchChallengeFailure: false,\n    loadingDetailsForChallengeId: challengeId,\n    details: null\n  }) : (0, _extends3.default)({}, state, {\n    fetchChallengeFailure: false,\n    loadingDetailsForChallengeId: challengeId\n  });\n}\n\n/**\n * Handles CHALLENGE/GET_DETAILS_DONE action.\n * Note, that it silently discards received details if the ID of received\n * challenge mismatches the one stored in loadingDetailsForChallengeId field\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetDetailsDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get challenge details!', action.payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to load the challenge', 'Please, try again a bit later');\n    return (0, _extends3.default)({}, state, {\n      fetchChallengeFailure: action.error,\n      loadingDetailsForChallengeId: ''\n    });\n  }\n\n  var details = action.payload;\n  if (_lodash2.default.toString(details.id) !== state.loadingDetailsForChallengeId) {\n    return state;\n  }\n\n  return (0, _extends3.default)({}, state, {\n    details: details,\n    fetchChallengeFailure: false,\n    loadingDetailsForChallengeId: ''\n  });\n}\n\n/**\n * Handles CHALLENGE/GET_SUBMISSION_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetSubmissionsInit(state, action) {\n  return (0, _extends3.default)({}, state, {\n    loadingSubmissionsForChallengeId: action.payload,\n    mySubmissions: { challengeId: '', v2: null }\n  });\n}\n\n/**\n * Handles challengeActions.fetchSubmissionsDone action.\n * @param {Object} state Previous state.\n * @param {Object} action Action.\n */\nfunction onGetSubmissionsDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get user\\'s submissions for the challenge', action.payload);\n    return (0, _extends3.default)({}, state, {\n      loadingSubmissionsForChallengeId: '',\n      mySubmissions: { challengeId: '', v2: null }\n    });\n  }\n\n  var _action$payload = action.payload,\n      challengeId = _action$payload.challengeId,\n      submissions = _action$payload.submissions;\n\n  if (challengeId !== state.loadingSubmissionsForChallengeId) return state;\n\n  return (0, _extends3.default)({}, state, {\n    loadingSubmissionsForChallengeId: '',\n    mySubmissions: { challengeId: challengeId, v2: submissions }\n  });\n}\n\n/**\n * Handles challengeActions.fetchCheckpointsDone action.\n * @param {Object} state Previous state.\n * @param {Object} action Action.\n */\nfunction onFetchCheckpointsDone(state, action) {\n  if (action.error) {\n    return (0, _extends3.default)({}, state, {\n      loadingCheckpoints: false\n    });\n  }\n  if (state.details && state.details.id === action.payload.challengeId) {\n    return (0, _extends3.default)({}, state, {\n      checkpoints: action.payload.checkpoints,\n      loadingCheckpoints: false\n    });\n  }\n  return state;\n}\n\n/**\n * Handles CHALLENGE/LOAD_RESULTS_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onLoadResultsInit(state, _ref) {\n  var payload = _ref.payload;\n\n  return (0, _extends3.default)({}, state, { loadingResultsForChallengeId: payload });\n}\n\n/**\n * Handles CHALLENGE/LOAD_RESULTS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onLoadResultsDone(state, action) {\n  if (action.payload.challengeId !== state.loadingResultsForChallengeId) {\n    return state;\n  }\n  if (action.error) {\n    _logger2.default.error(action.payload);\n    return (0, _extends3.default)({}, state, {\n      loadingResultsForChallengeId: '',\n      results: null,\n      resultsLoadedForChallengeId: ''\n    });\n  }\n  return (0, _extends3.default)({}, state, {\n    loadingResultsForChallengeId: '',\n    results: action.payload.results,\n    resultsLoadedForChallengeId: action.payload.challengeId\n  });\n}\n\n/**\n * Handles CHALLENGE/REGISTER_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onRegisterDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to register for the challenge!', action.payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to register for the challenge!');\n    return (0, _extends3.default)({}, state, { registering: false });\n  }\n  /* As a part of registration flow we silently update challenge details,\n   * reusing for this purpose the corresponding action handler. Thus, we\n   * should also reuse corresponding reducer to generate proper state. */\n  return onGetDetailsDone((0, _extends3.default)({}, state, {\n    registering: false,\n    loadingDetailsForChallengeId: _lodash2.default.toString(state.details.id)\n  }), action);\n}\n\n/**\n * Handles CHALLENGE/UNREGISTER_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onUnregisterDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to register for the challenge!', action.payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to unregister for the challenge!');\n    return (0, _extends3.default)({}, state, { unregistering: false });\n  }\n  /* As a part of unregistration flow we silently update challenge details,\n   * reusing for this purpose the corresponding action handler. Thus, we\n   * should also reuse corresponding reducer to generate proper state. */\n  return onGetDetailsDone((0, _extends3.default)({}, state, {\n    unregistering: false,\n    loadingDetailsForChallengeId: _lodash2.default.toString(state.details.id)\n  }), action);\n}\n\n/**\n * Handles CHALLENGE/UPDATE_CHALLENGE_INIT.\n * @param {Object} state Old state.\n * @param {Object} actions Action.\n * @return {Object} New state.\n */\nfunction onUpdateChallengeInit(state, _ref2) {\n  var payload = _ref2.payload;\n\n  return (0, _extends3.default)({}, state, { updatingChallengeUuid: payload });\n}\n\n/**\n * Handles CHALLENGE/UPDATE_CHALLENGE_DONE.\n * @param {Object} state Old state.\n * @param {Object} actions Action.\n * @return {Object} New state.\n */\nfunction onUpdateChallengeDone(state, _ref3) {\n  var error = _ref3.error,\n      payload = _ref3.payload;\n\n  if (error) {\n    (0, _errors.fireErrorMessage)('Failed to save the challenge!', '');\n    _logger2.default.error('Failed to save the challenge', payload);\n    return state;\n  }\n  if (payload.uuid !== state.updatingChallengeUuid) return state;\n\n  /* Due to the normalization of challenge APIs responses done when a challenge\n   * is loaded, many pieces of our code expect different information in a format\n   * different from API v3 response, thus if we just save entire payload.res\n   * into the Redux state segment, it will break our app. As a rapid fix, let's\n   * just save only the data which are really supposed to be updated in the\n   * current use case (editing of challenge specs). */\n  var res = _lodash2.default.pick(payload.res, ['detailedRequirements', 'introduction', 'round1Introduction', 'round2Introduction', 'submissionGuidelines']);\n\n  return (0, _extends3.default)({}, state, {\n    details: (0, _extends3.default)({}, state.details, res),\n    updatingChallengeUuid: ''\n  });\n}\n\n/**\n * Handles CHALLENGE/GET_ACTIVE_CHALLENGES_COUNT_DONE action.\n * @param {Object} state Old state.\n * @param {Object} action Action payload/error\n * @return {Object} New state\n */\nfunction onGetActiveChallengesCountDone(state, _ref4) {\n  var payload = _ref4.payload,\n      error = _ref4.error;\n\n  if (error) {\n    (0, _errors.fireErrorMessage)('Failed to get active challenges count!', '');\n    _logger2.default.error('Failed to get active challenges count', payload);\n    return state;\n  }\n\n  return (0, _extends3.default)({}, state, { activeChallengesCount: payload });\n}\n\n/**\n * Creates a new Challenge reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Challenge reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _challenge2.default.challenge;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.dropCheckpoints, function (state) {\n    return (0, _extends3.default)({}, state, { checkpoints: null });\n  }), (0, _defineProperty3.default)(_handleActions, a.dropResults, function (state) {\n    return (0, _extends3.default)({}, state, { results: null });\n  }), (0, _defineProperty3.default)(_handleActions, a.getDetailsInit, onGetDetailsInit), (0, _defineProperty3.default)(_handleActions, a.getDetailsDone, onGetDetailsDone), (0, _defineProperty3.default)(_handleActions, a.getSubmissionsInit, onGetSubmissionsInit), (0, _defineProperty3.default)(_handleActions, a.getSubmissionsDone, onGetSubmissionsDone), (0, _defineProperty3.default)(_handleActions, _smp2.default.smp.deleteSubmissionDone, function (state, _ref5) {\n    var payload = _ref5.payload;\n    return (0, _extends3.default)({}, state, {\n      mySubmissions: (0, _extends3.default)({}, state.mySubmissions, {\n        v2: state.mySubmissions.v2.filter(function (subm) {\n          return subm.submissionId !== payload;\n        })\n      })\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.registerInit, function (state) {\n    return (0, _extends3.default)({}, state, { registering: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.registerDone, onRegisterDone), (0, _defineProperty3.default)(_handleActions, a.unregisterInit, function (state) {\n    return (0, _extends3.default)({}, state, { unregistering: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.unregisterDone, onUnregisterDone), (0, _defineProperty3.default)(_handleActions, a.loadResultsInit, onLoadResultsInit), (0, _defineProperty3.default)(_handleActions, a.loadResultsDone, onLoadResultsDone), (0, _defineProperty3.default)(_handleActions, a.fetchCheckpointsInit, function (state) {\n    return (0, _extends3.default)({}, state, {\n      checkpoints: null,\n      loadingCheckpoints: true\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.fetchCheckpointsDone, onFetchCheckpointsDone), (0, _defineProperty3.default)(_handleActions, a.updateChallengeInit, onUpdateChallengeInit), (0, _defineProperty3.default)(_handleActions, a.updateChallengeDone, onUpdateChallengeDone), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesCountInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesCountDone, onGetActiveChallengesCountDone), _handleActions), _lodash2.default.defaults(initialState, {\n    details: null,\n    loadingCheckpoints: false,\n    loadingDetailsForChallengeId: '',\n    loadingResultsForChallengeId: '',\n    mySubmissions: {},\n    checkpoints: null,\n    registering: false,\n    results: null,\n    resultsLoadedForChallengeId: '',\n    unregistering: false,\n    updatingChallengeUuid: ''\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n *\n * @param {Object} options={} Optional. Factory options.\n * @param {String} [options.auth.tokenV2=''] Optional. Topcoder v2 auth token.\n * @param {String} [options.auth.tokenV3=''] Optional. Topcoder v3 auth token.\n * @param {String} [options.challenge.challengeDetails.id=''] Optional. ID of\n *  the challenge to load details for.\n * @param {Boolean} [options.challenge.challengeDetails.mySubmission=false]\n *  Optional. The flag indicates whether load my submission.\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  /* Server-side rendering of Submission Management Page. */\n\n  /* TODO: This shares some common logic with the next \"if\" block, which\n   * should be re-used there. */\n  /* TODO: For completely server-side rendering it is also necessary to load\n   * terms, etc. */\n\n  var tokens = {\n    tokenV2: _lodash2.default.get(options.auth, 'tokenV2'),\n    tokenV3: _lodash2.default.get(options.auth, 'tokenV3')\n  };\n\n  var state = {};\n  var challengeId = _lodash2.default.get(options, 'challenge.challengeDetails.id');\n  var mySubmission = _lodash2.default.get(options, 'challenge.challengeDetails.mySubmission');\n\n  if (challengeId && !mySubmission) {\n    return _topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.getDetailsDone(challengeId, tokens.tokenV3, tokens.tokenV2)).then(function (details) {\n      var track = _lodash2.default.get(details, 'payload.track', '').toLowerCase();\n      var checkpointsPromise = track === 'design' ? _topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.fetchCheckpointsDone(tokens.tokenV2, challengeId)) : null;\n      var resultsPromise = _lodash2.default.get(details, 'payload.status', '') === 'COMPLETED' ? _topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.loadResultsDone(tokens, challengeId, track)) : null;\n      return _promise2.default.all([details, checkpointsPromise, resultsPromise]);\n    }).then(function (_ref6) {\n      var _ref7 = (0, _slicedToArray3.default)(_ref6, 3),\n          details = _ref7[0],\n          checkpoints = _ref7[1],\n          results = _ref7[2];\n\n      state = (0, _extends3.default)({}, state, {\n        loadingCheckpoints: true,\n        loadingDetailsForChallengeId: challengeId,\n        loadingResultsForChallengeId: challengeId\n      });\n      state = onGetDetailsDone(state, details);\n      if (checkpoints) state = onFetchCheckpointsDone(state, checkpoints);\n      if (results) state = onLoadResultsDone(state, results);\n      return state;\n    }).then(function (res) {\n      return _topcoderReactUtils.redux.combineReducers(create(res), { mySubmissionsManagement: _mySubmissionsManagement2.default });\n    });\n  }\n\n  if (challengeId && mySubmission) {\n    return _promise2.default.all([_topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.getDetailsDone(challengeId, tokens.tokenV3, tokens.tokenV2)), _topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.getSubmissionsDone(challengeId, tokens.tokenV2))]).then(function (_ref8) {\n      var _ref9 = (0, _slicedToArray3.default)(_ref8, 2),\n          challenge = _ref9[0],\n          submissions = _ref9[1];\n\n      state = (0, _extends3.default)({}, state, {\n        loadingSubmissionsForChallengeId: challengeId,\n        loadingDetailsForChallengeId: challengeId\n      });\n      state = onGetDetailsDone(state, challenge);\n      return onGetSubmissionsDone(state, submissions);\n    }).then(function (res) {\n      return _topcoderReactUtils.redux.combineReducers(create(res), { mySubmissionsManagement: _mySubmissionsManagement2.default });\n    });\n  }\n\n  /* Otherwise this part of Redux state is initialized empty. */\n  return _promise2.default.resolve(_topcoderReactUtils.redux.combineReducers(create(state), { mySubmissionsManagement: _mySubmissionsManagement2.default }));\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default intial state.\n */\n\nvar _default = _topcoderReactUtils.redux.combineReducers(create(), { mySubmissionsManagement: _mySubmissionsManagement2.default });\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetDetailsInit, 'onGetDetailsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onGetDetailsDone, 'onGetDetailsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onGetSubmissionsInit, 'onGetSubmissionsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onGetSubmissionsDone, 'onGetSubmissionsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onFetchCheckpointsDone, 'onFetchCheckpointsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onLoadResultsInit, 'onLoadResultsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onLoadResultsDone, 'onLoadResultsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onRegisterDone, 'onRegisterDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onUnregisterDone, 'onUnregisterDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onUpdateChallengeInit, 'onUpdateChallengeInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onUpdateChallengeDone, 'onUpdateChallengeDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onGetActiveChallengesCountDone, 'onGetActiveChallengesCountDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/challenge.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/challenge.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _challenge = __webpack_require__(/*! ../actions/challenge */ \"./src/actions/challenge.js\");\n\nvar _challenge2 = _interopRequireDefault(_challenge);\n\nvar _smp = __webpack_require__(/*! ../actions/smp */ \"./src/actions/smp.js\");\n\nvar _smp2 = _interopRequireDefault(_smp);\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nvar _mySubmissionsManagement = __webpack_require__(/*! ./my-submissions-management */ \"./src/reducers/my-submissions-management.js\");\n\nvar _mySubmissionsManagement2 = _interopRequireDefault(_mySubmissionsManagement);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.challenge\"\n       * @desc Reducer for {@link module:actions.challenge} actions.\n       *\n       * State segment managed by this reducer has the following strcuture:\n       * @todo Document the structure.\n       */\n\n/**\n * Handles CHALLENGE/GET_DETAILS_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state\n */\nfunction onGetDetailsInit(state, action) {\n  var challengeId = action.payload;\n  return state.details && _lodash2.default.toString(state.details.id) !== challengeId ? (0, _extends3.default)({}, state, {\n    fetchChallengeFailure: false,\n    loadingDetailsForChallengeId: challengeId,\n    details: null\n  }) : (0, _extends3.default)({}, state, {\n    fetchChallengeFailure: false,\n    loadingDetailsForChallengeId: challengeId\n  });\n}\n\n/**\n * Handles CHALLENGE/GET_DETAILS_DONE action.\n * Note, that it silently discards received details if the ID of received\n * challenge mismatches the one stored in loadingDetailsForChallengeId field\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetDetailsDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get challenge details!', action.payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to load the challenge', 'Please, try again a bit later');\n    return (0, _extends3.default)({}, state, {\n      fetchChallengeFailure: action.error,\n      loadingDetailsForChallengeId: ''\n    });\n  }\n\n  var details = action.payload;\n  if (_lodash2.default.toString(details.id) !== state.loadingDetailsForChallengeId) {\n    return state;\n  }\n\n  return (0, _extends3.default)({}, state, {\n    details: details,\n    fetchChallengeFailure: false,\n    loadingDetailsForChallengeId: ''\n  });\n}\n\n/**\n * Handles CHALLENGE/GET_SUBMISSION_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetSubmissionsInit(state, action) {\n  return (0, _extends3.default)({}, state, {\n    loadingSubmissionsForChallengeId: action.payload,\n    mySubmissions: { challengeId: '', v2: null }\n  });\n}\n\n/**\n * Handles challengeActions.fetchSubmissionsDone action.\n * @param {Object} state Previous state.\n * @param {Object} action Action.\n */\nfunction onGetSubmissionsDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get user\\'s submissions for the challenge', action.payload);\n    return (0, _extends3.default)({}, state, {\n      loadingSubmissionsForChallengeId: '',\n      mySubmissions: { challengeId: '', v2: null }\n    });\n  }\n\n  var _action$payload = action.payload,\n      challengeId = _action$payload.challengeId,\n      submissions = _action$payload.submissions;\n\n  if (challengeId !== state.loadingSubmissionsForChallengeId) return state;\n\n  return (0, _extends3.default)({}, state, {\n    loadingSubmissionsForChallengeId: '',\n    mySubmissions: { challengeId: challengeId, v2: submissions }\n  });\n}\n\n/**\n * Handles challengeActions.fetchCheckpointsDone action.\n * @param {Object} state Previous state.\n * @param {Object} action Action.\n */\nfunction onFetchCheckpointsDone(state, action) {\n  if (action.error) {\n    return (0, _extends3.default)({}, state, {\n      loadingCheckpoints: false\n    });\n  }\n  if (state.details && state.details.id === action.payload.challengeId) {\n    return (0, _extends3.default)({}, state, {\n      checkpoints: action.payload.checkpoints,\n      loadingCheckpoints: false\n    });\n  }\n  return state;\n}\n\n/**\n * Handles CHALLENGE/LOAD_RESULTS_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onLoadResultsInit(state, _ref) {\n  var payload = _ref.payload;\n\n  return (0, _extends3.default)({}, state, { loadingResultsForChallengeId: payload });\n}\n\n/**\n * Handles CHALLENGE/LOAD_RESULTS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onLoadResultsDone(state, action) {\n  if (action.payload.challengeId !== state.loadingResultsForChallengeId) {\n    return state;\n  }\n  if (action.error) {\n    _logger2.default.error(action.payload);\n    return (0, _extends3.default)({}, state, {\n      loadingResultsForChallengeId: '',\n      results: null,\n      resultsLoadedForChallengeId: ''\n    });\n  }\n  return (0, _extends3.default)({}, state, {\n    loadingResultsForChallengeId: '',\n    results: action.payload.results,\n    resultsLoadedForChallengeId: action.payload.challengeId\n  });\n}\n\n/**\n * Handles CHALLENGE/REGISTER_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onRegisterDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to register for the challenge!', action.payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to register for the challenge!');\n    return (0, _extends3.default)({}, state, { registering: false });\n  }\n  /* As a part of registration flow we silently update challenge details,\n   * reusing for this purpose the corresponding action handler. Thus, we\n   * should also reuse corresponding reducer to generate proper state. */\n  return onGetDetailsDone((0, _extends3.default)({}, state, {\n    registering: false,\n    loadingDetailsForChallengeId: _lodash2.default.toString(state.details.id)\n  }), action);\n}\n\n/**\n * Handles CHALLENGE/UNREGISTER_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object}\n */\nfunction onUnregisterDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to register for the challenge!', action.payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to unregister for the challenge!');\n    return (0, _extends3.default)({}, state, { unregistering: false });\n  }\n  /* As a part of unregistration flow we silently update challenge details,\n   * reusing for this purpose the corresponding action handler. Thus, we\n   * should also reuse corresponding reducer to generate proper state. */\n  return onGetDetailsDone((0, _extends3.default)({}, state, {\n    unregistering: false,\n    loadingDetailsForChallengeId: _lodash2.default.toString(state.details.id)\n  }), action);\n}\n\n/**\n * Handles CHALLENGE/UPDATE_CHALLENGE_INIT.\n * @param {Object} state Old state.\n * @param {Object} actions Action.\n * @return {Object} New state.\n */\nfunction onUpdateChallengeInit(state, _ref2) {\n  var payload = _ref2.payload;\n\n  return (0, _extends3.default)({}, state, { updatingChallengeUuid: payload });\n}\n\n/**\n * Handles CHALLENGE/UPDATE_CHALLENGE_DONE.\n * @param {Object} state Old state.\n * @param {Object} actions Action.\n * @return {Object} New state.\n */\nfunction onUpdateChallengeDone(state, _ref3) {\n  var error = _ref3.error,\n      payload = _ref3.payload;\n\n  if (error) {\n    (0, _errors.fireErrorMessage)('Failed to save the challenge!', '');\n    _logger2.default.error('Failed to save the challenge', payload);\n    return state;\n  }\n  if (payload.uuid !== state.updatingChallengeUuid) return state;\n\n  /* Due to the normalization of challenge APIs responses done when a challenge\n   * is loaded, many pieces of our code expect different information in a format\n   * different from API v3 response, thus if we just save entire payload.res\n   * into the Redux state segment, it will break our app. As a rapid fix, let's\n   * just save only the data which are really supposed to be updated in the\n   * current use case (editing of challenge specs). */\n  var res = _lodash2.default.pick(payload.res, ['detailedRequirements', 'introduction', 'round1Introduction', 'round2Introduction', 'submissionGuidelines']);\n\n  return (0, _extends3.default)({}, state, {\n    details: (0, _extends3.default)({}, state.details, res),\n    updatingChallengeUuid: ''\n  });\n}\n\n/**\n * Handles CHALLENGE/GET_ACTIVE_CHALLENGES_COUNT_DONE action.\n * @param {Object} state Old state.\n * @param {Object} action Action payload/error\n * @return {Object} New state\n */\nfunction onGetActiveChallengesCountDone(state, _ref4) {\n  var payload = _ref4.payload,\n      error = _ref4.error;\n\n  if (error) {\n    (0, _errors.fireErrorMessage)('Failed to get active challenges count!', '');\n    _logger2.default.error('Failed to get active challenges count', payload);\n    return state;\n  }\n\n  return (0, _extends3.default)({}, state, { activeChallengesCount: payload });\n}\n\n/**\n * Creates a new Challenge reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Challenge reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _challenge2.default.challenge;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.dropCheckpoints, function (state) {\n    return (0, _extends3.default)({}, state, { checkpoints: null });\n  }), (0, _defineProperty3.default)(_handleActions, a.dropResults, function (state) {\n    return (0, _extends3.default)({}, state, { results: null });\n  }), (0, _defineProperty3.default)(_handleActions, a.getDetailsInit, onGetDetailsInit), (0, _defineProperty3.default)(_handleActions, a.getDetailsDone, onGetDetailsDone), (0, _defineProperty3.default)(_handleActions, a.getSubmissionsInit, onGetSubmissionsInit), (0, _defineProperty3.default)(_handleActions, a.getSubmissionsDone, onGetSubmissionsDone), (0, _defineProperty3.default)(_handleActions, _smp2.default.smp.deleteSubmissionDone, function (state, _ref5) {\n    var payload = _ref5.payload;\n    return (0, _extends3.default)({}, state, {\n      mySubmissions: (0, _extends3.default)({}, state.mySubmissions, {\n        v2: state.mySubmissions.v2.filter(function (subm) {\n          return subm.submissionId !== payload;\n        })\n      })\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.registerInit, function (state) {\n    return (0, _extends3.default)({}, state, { registering: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.registerDone, onRegisterDone), (0, _defineProperty3.default)(_handleActions, a.unregisterInit, function (state) {\n    return (0, _extends3.default)({}, state, { unregistering: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.unregisterDone, onUnregisterDone), (0, _defineProperty3.default)(_handleActions, a.loadResultsInit, onLoadResultsInit), (0, _defineProperty3.default)(_handleActions, a.loadResultsDone, onLoadResultsDone), (0, _defineProperty3.default)(_handleActions, a.fetchCheckpointsInit, function (state) {\n    return (0, _extends3.default)({}, state, {\n      checkpoints: null,\n      loadingCheckpoints: true\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.fetchCheckpointsDone, onFetchCheckpointsDone), (0, _defineProperty3.default)(_handleActions, a.updateChallengeInit, onUpdateChallengeInit), (0, _defineProperty3.default)(_handleActions, a.updateChallengeDone, onUpdateChallengeDone), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesCountInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesCountDone, onGetActiveChallengesCountDone), _handleActions), _lodash2.default.defaults(initialState, {\n    details: null,\n    loadingCheckpoints: false,\n    loadingDetailsForChallengeId: '',\n    loadingResultsForChallengeId: '',\n    mySubmissions: {},\n    checkpoints: null,\n    registering: false,\n    results: null,\n    resultsLoadedForChallengeId: '',\n    unregistering: false,\n    updatingChallengeUuid: ''\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n *\n * @param {Object} options={} Optional. Factory options.\n * @param {String} [options.auth.tokenV2=''] Optional. Topcoder v2 auth token.\n * @param {String} [options.auth.tokenV3=''] Optional. Topcoder v3 auth token.\n * @param {String} [options.challenge.challengeDetails.id=''] Optional. ID of\n *  the challenge to load details for.\n * @param {Boolean} [options.challenge.challengeDetails.mySubmission=false]\n *  Optional. The flag indicates whether load my submission.\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  /* Server-side rendering of Submission Management Page. */\n\n  /* TODO: This shares some common logic with the next \"if\" block, which\n   * should be re-used there. */\n  /* TODO: For completely server-side rendering it is also necessary to load\n   * terms, etc. */\n\n  var tokens = {\n    tokenV2: _lodash2.default.get(options.auth, 'tokenV2'),\n    tokenV3: _lodash2.default.get(options.auth, 'tokenV3')\n  };\n\n  var state = {};\n  var challengeId = _lodash2.default.get(options, 'challenge.challengeDetails.id');\n  var mySubmission = _lodash2.default.get(options, 'challenge.challengeDetails.mySubmission');\n\n  if (challengeId && !mySubmission) {\n    return _topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.getDetailsDone(challengeId, tokens.tokenV3, tokens.tokenV2)).then(function (details) {\n      var track = _lodash2.default.get(details, 'payload.track', '').toLowerCase();\n      var checkpointsPromise = track === 'design' ? _topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.fetchCheckpointsDone(tokens.tokenV2, challengeId)) : null;\n      var resultsPromise = _lodash2.default.get(details, 'payload.status', '') === 'COMPLETED' ? _topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.loadResultsDone(tokens, challengeId, track)) : null;\n      return _promise2.default.all([details, checkpointsPromise, resultsPromise]);\n    }).then(function (_ref6) {\n      var _ref7 = (0, _slicedToArray3.default)(_ref6, 3),\n          details = _ref7[0],\n          checkpoints = _ref7[1],\n          results = _ref7[2];\n\n      state = (0, _extends3.default)({}, state, {\n        loadingCheckpoints: true,\n        loadingDetailsForChallengeId: challengeId,\n        loadingResultsForChallengeId: challengeId\n      });\n      state = onGetDetailsDone(state, details);\n      if (checkpoints) state = onFetchCheckpointsDone(state, checkpoints);\n      if (results) state = onLoadResultsDone(state, results);\n      return state;\n    }).then(function (res) {\n      return _topcoderReactUtils.redux.combineReducers(create(res), { mySubmissionsManagement: _mySubmissionsManagement2.default });\n    });\n  }\n\n  if (challengeId && mySubmission) {\n    return _promise2.default.all([_topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.getDetailsDone(challengeId, tokens.tokenV3, tokens.tokenV2)), _topcoderReactUtils.redux.resolveAction(_challenge2.default.challenge.getSubmissionsDone(challengeId, tokens.tokenV2))]).then(function (_ref8) {\n      var _ref9 = (0, _slicedToArray3.default)(_ref8, 2),\n          challenge = _ref9[0],\n          submissions = _ref9[1];\n\n      state = (0, _extends3.default)({}, state, {\n        loadingSubmissionsForChallengeId: challengeId,\n        loadingDetailsForChallengeId: challengeId\n      });\n      state = onGetDetailsDone(state, challenge);\n      return onGetSubmissionsDone(state, submissions);\n    }).then(function (res) {\n      return _topcoderReactUtils.redux.combineReducers(create(res), { mySubmissionsManagement: _mySubmissionsManagement2.default });\n    });\n  }\n\n  /* Otherwise this part of Redux state is initialized empty. */\n  return _promise2.default.resolve(_topcoderReactUtils.redux.combineReducers(create(state), { mySubmissionsManagement: _mySubmissionsManagement2.default }));\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default intial state.\n */\n\nvar _default = _topcoderReactUtils.redux.combineReducers(create(), { mySubmissionsManagement: _mySubmissionsManagement2.default });\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetDetailsInit, 'onGetDetailsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onGetDetailsDone, 'onGetDetailsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onGetSubmissionsInit, 'onGetSubmissionsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onGetSubmissionsDone, 'onGetSubmissionsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onFetchCheckpointsDone, 'onFetchCheckpointsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onLoadResultsInit, 'onLoadResultsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onLoadResultsDone, 'onLoadResultsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onRegisterDone, 'onRegisterDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onUnregisterDone, 'onUnregisterDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onUpdateChallengeInit, 'onUpdateChallengeInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onUpdateChallengeDone, 'onUpdateChallengeDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(onGetActiveChallengesCountDone, 'onGetActiveChallengesCountDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/challenge.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/challenge.js?");
 
 /***/ }),
 
@@ -676,7 +676,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _direct = __webpack_require__(/*! ../actions/direct */ \"./src/actions/direct.js\");\n\nvar _direct2 = _interopRequireDefault(_direct);\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.direct\"\n       * @desc Reducer for handling the results of Direct-related actions.\n       * @todo Document state segment structure.\n       */\n\nvar ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN = 'Cannot get user projects without auth token';\n\n/**\n * Drops out all data and cancels any ongoing data loading related to this\n * reducer.\n * @param {Object} state\n * @return {Object} New state.\n */\nfunction onDropAll(state) {\n  return (0, _extends3.default)({}, state, {\n    loadingProjectDetailsForId: 0,\n    loadingProjectsForUsername: '',\n    projectDetails: {},\n    projects: []\n  });\n}\n\n/**\n * Inits loading of the specified project, cancelling the ongoing loading of\n * project details, if any.\n * @param {Object} state\n * @param {Object} action Its payload is the projectId.\n * @return {Object} New state.\n */\nfunction onGetProjectDetailsInit(state, _ref) {\n  var payload = _ref.payload;\n\n  return (0, _extends3.default)({}, state, {\n    loadingProjectDetailsForId: payload\n  });\n}\n\n/**\n * Stores loaded project details to the state.\n * @param {Object} state\n * @param {Object} action Its payload is the project details object.\n * @return {Object} New state.\n */\nfunction onGetProjectDetailsDone(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to load project details', payload);\n    throw payload;\n  }\n  if (payload.project.projectId !== state.loadingProjectDetailsForId) {\n    return state;\n  }\n  return (0, _extends3.default)({}, state, {\n    loadingProjectDetailsForId: 0,\n    projectDetails: payload\n  });\n}\n\n/**\n * Handler for the GET_PROJECT_PERMISSIONS_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetProjectPermissionsInit(state, _ref3) {\n  var payload = _ref3.payload;\n\n  var projectPermissions = (0, _extends3.default)({}, state.projectPermissions, {\n    loadingForProjectId: payload\n  });\n  return (0, _extends3.default)({}, state, { projectPermissions: projectPermissions });\n}\n\n/**\n * Handler for the GET_PROJECT_PERMISSIONS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetProjectPermissionsDone(state, _ref4) {\n  var error = _ref4.error,\n      payload = _ref4.payload;\n\n  if (error) {\n    (0, _errors.fireErrorMessage)('Failed to load project permissions', '');\n    _logger2.default.error('Failed to load project permissions', payload);\n  }\n  var permissions = payload.permissions,\n      projectId = payload.projectId;\n\n  if (projectId !== state.projectPermissions.loadingForProjectId) return state;\n  var projectPermissions = {\n    loadingForProjectId: 0,\n    permissions: permissions,\n    projectId: projectId,\n    timestamp: Date.now()\n  };\n  return (0, _extends3.default)({}, state, { projectPermissions: projectPermissions });\n}\n\n/**\n * Handles initialization of projects loading.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserProjectsInit(state, _ref5) {\n  var tokenV3 = _ref5.payload;\n\n  if (!tokenV3) {\n    _logger2.default.error(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN);\n    throw new Error(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN);\n  }\n  return (0, _extends3.default)({}, state, {\n    loadingProjectsForUsername: (0, _tcAccounts.decodeToken)(tokenV3).handle\n  });\n}\n\n/**\n * Handles the result of projects loading.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserProjectsDone(state, _ref6) {\n  var error = _ref6.error,\n      payload = _ref6.payload;\n\n  if (error) {\n    _logger2.default.error(payload);\n    throw payload;\n  }\n  var projects = payload.projects,\n      tokenV3 = payload.tokenV3;\n\n  if (!tokenV3) {\n    _logger2.default.error(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN);\n    throw new Error(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN);\n  }\n  if ((0, _tcAccounts.decodeToken)(tokenV3).handle !== state.loadingProjectsForUsername) {\n    return state;\n  }\n  return (0, _extends3.default)({}, state, {\n    loadingProjectsForUsername: '',\n    projects: projects.sort(function (a, b) {\n      return a.name.localeCompare(b.name);\n    })\n  });\n}\n\n/**\n * Creates a new Direct reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @param {Object} mergeReducers Optional. Reducers to merge.\n * @return {Function} Direct reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _direct2.default.direct;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.dropAll, onDropAll), (0, _defineProperty3.default)(_handleActions, a.getProjectDetailsInit, onGetProjectDetailsInit), (0, _defineProperty3.default)(_handleActions, a.getProjectDetailsDone, onGetProjectDetailsDone), (0, _defineProperty3.default)(_handleActions, a.getProjectPermissionsInit, onGetProjectPermissionsInit), (0, _defineProperty3.default)(_handleActions, a.getProjectPermissionsDone, onGetProjectPermissionsDone), (0, _defineProperty3.default)(_handleActions, a.getUserProjectsInit, onGetUserProjectsInit), (0, _defineProperty3.default)(_handleActions, a.getUserProjectsDone, onGetUserProjectsDone), _handleActions), _lodash2.default.defaults(initialState, {\n    /* If we are loading details of some project, this field holds the project\n     * ID; zero otherwise. */\n    loadingProjectDetailsForId: 0,\n\n    /* Holds username of the user which projects are being loaded; empty\n     * string if nothing is being loaded at the moment. */\n    loadingProjectsForUsername: '',\n\n    /* Holds details of some project, or an empty object. */\n    projectDetails: {},\n\n    projectPermissions: {\n      loadingForProjectId: 0,\n      permissions: [],\n      projectId: 0,\n      timestamp: 0\n    },\n\n    /* Holds the array of loaded projects. */\n    projects: []\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN, 'ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onDropAll, 'onDropAll', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetProjectDetailsInit, 'onGetProjectDetailsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetProjectDetailsDone, 'onGetProjectDetailsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetProjectPermissionsInit, 'onGetProjectPermissionsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetProjectPermissionsDone, 'onGetProjectPermissionsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetUserProjectsInit, 'onGetUserProjectsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetUserProjectsDone, 'onGetUserProjectsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/direct.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/direct.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _direct = __webpack_require__(/*! ../actions/direct */ \"./src/actions/direct.js\");\n\nvar _direct2 = _interopRequireDefault(_direct);\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.direct\"\n       * @desc Reducer for handling the results of Direct-related actions.\n       * @todo Document state segment structure.\n       */\n\nvar ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN = 'Cannot get user projects without auth token';\n\n/**\n * Drops out all data and cancels any ongoing data loading related to this\n * reducer.\n * @param {Object} state\n * @return {Object} New state.\n */\nfunction onDropAll(state) {\n  return (0, _extends3.default)({}, state, {\n    loadingProjectDetailsForId: 0,\n    loadingProjectsForUsername: '',\n    projectDetails: {},\n    projects: []\n  });\n}\n\n/**\n * Inits loading of the specified project, cancelling the ongoing loading of\n * project details, if any.\n * @param {Object} state\n * @param {Object} action Its payload is the projectId.\n * @return {Object} New state.\n */\nfunction onGetProjectDetailsInit(state, _ref) {\n  var payload = _ref.payload;\n\n  return (0, _extends3.default)({}, state, {\n    loadingProjectDetailsForId: payload\n  });\n}\n\n/**\n * Stores loaded project details to the state.\n * @param {Object} state\n * @param {Object} action Its payload is the project details object.\n * @return {Object} New state.\n */\nfunction onGetProjectDetailsDone(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to load project details', payload);\n    throw payload;\n  }\n  if (payload.project.projectId !== state.loadingProjectDetailsForId) {\n    return state;\n  }\n  return (0, _extends3.default)({}, state, {\n    loadingProjectDetailsForId: 0,\n    projectDetails: payload\n  });\n}\n\n/**\n * Handler for the GET_PROJECT_PERMISSIONS_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetProjectPermissionsInit(state, _ref3) {\n  var payload = _ref3.payload;\n\n  var projectPermissions = (0, _extends3.default)({}, state.projectPermissions, {\n    loadingForProjectId: payload\n  });\n  return (0, _extends3.default)({}, state, { projectPermissions: projectPermissions });\n}\n\n/**\n * Handler for the GET_PROJECT_PERMISSIONS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetProjectPermissionsDone(state, _ref4) {\n  var error = _ref4.error,\n      payload = _ref4.payload;\n\n  if (error) {\n    (0, _errors.fireErrorMessage)('Failed to load project permissions', '');\n    _logger2.default.error('Failed to load project permissions', payload);\n  }\n  var permissions = payload.permissions,\n      projectId = payload.projectId;\n\n  if (projectId !== state.projectPermissions.loadingForProjectId) return state;\n  var projectPermissions = {\n    loadingForProjectId: 0,\n    permissions: permissions,\n    projectId: projectId,\n    timestamp: Date.now()\n  };\n  return (0, _extends3.default)({}, state, { projectPermissions: projectPermissions });\n}\n\n/**\n * Handles initialization of projects loading.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserProjectsInit(state, _ref5) {\n  var tokenV3 = _ref5.payload;\n\n  if (!tokenV3) {\n    _logger2.default.error(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN);\n    throw new Error(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN);\n  }\n  return (0, _extends3.default)({}, state, {\n    loadingProjectsForUsername: (0, _tcAccounts.decodeToken)(tokenV3).handle\n  });\n}\n\n/**\n * Handles the result of projects loading.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserProjectsDone(state, _ref6) {\n  var error = _ref6.error,\n      payload = _ref6.payload;\n\n  if (error) {\n    _logger2.default.error(payload);\n    throw payload;\n  }\n  var projects = payload.projects,\n      tokenV3 = payload.tokenV3;\n\n  if (!tokenV3) {\n    _logger2.default.error(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN);\n    throw new Error(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN);\n  }\n  if ((0, _tcAccounts.decodeToken)(tokenV3).handle !== state.loadingProjectsForUsername) {\n    return state;\n  }\n  return (0, _extends3.default)({}, state, {\n    loadingProjectsForUsername: '',\n    projects: projects.sort(function (a, b) {\n      return a.name.localeCompare(b.name);\n    })\n  });\n}\n\n/**\n * Creates a new Direct reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @param {Object} mergeReducers Optional. Reducers to merge.\n * @return {Function} Direct reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _direct2.default.direct;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.dropAll, onDropAll), (0, _defineProperty3.default)(_handleActions, a.getProjectDetailsInit, onGetProjectDetailsInit), (0, _defineProperty3.default)(_handleActions, a.getProjectDetailsDone, onGetProjectDetailsDone), (0, _defineProperty3.default)(_handleActions, a.getProjectPermissionsInit, onGetProjectPermissionsInit), (0, _defineProperty3.default)(_handleActions, a.getProjectPermissionsDone, onGetProjectPermissionsDone), (0, _defineProperty3.default)(_handleActions, a.getUserProjectsInit, onGetUserProjectsInit), (0, _defineProperty3.default)(_handleActions, a.getUserProjectsDone, onGetUserProjectsDone), _handleActions), _lodash2.default.defaults(initialState, {\n    /* If we are loading details of some project, this field holds the project\n     * ID; zero otherwise. */\n    loadingProjectDetailsForId: 0,\n\n    /* Holds username of the user which projects are being loaded; empty\n     * string if nothing is being loaded at the moment. */\n    loadingProjectsForUsername: '',\n\n    /* Holds details of some project, or an empty object. */\n    projectDetails: {},\n\n    projectPermissions: {\n      loadingForProjectId: 0,\n      permissions: [],\n      projectId: 0,\n      timestamp: 0\n    },\n\n    /* Holds the array of loaded projects. */\n    projects: []\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN, 'ERROR_MSG_GET_USER_PROJECTS_WITHOUT_AUTH_TOKEN', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onDropAll, 'onDropAll', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetProjectDetailsInit, 'onGetProjectDetailsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetProjectDetailsDone, 'onGetProjectDetailsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetProjectPermissionsInit, 'onGetProjectPermissionsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetProjectPermissionsDone, 'onGetProjectPermissionsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetUserProjectsInit, 'onGetUserProjectsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(onGetUserProjectsDone, 'onGetUserProjectsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/direct.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/direct.js?");
 
 /***/ }),
 
@@ -688,7 +688,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _extends4 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends5 = _interopRequireDefault(_extends4);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _initialErrorIconStat; /**\n                            * @module \"reducers.errors\"\n                            * @desc Redux Reducer for application-wide error handling.\n                            *\n                            * Description:\n                            *   Implements state reducers for application-wide error handling.\n                            * @todo Document state segment structure.\n                            */\n\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _errors = __webpack_require__(/*! ../actions/errors */ \"./src/actions/errors.js\");\n\nvar _errors2 = _interopRequireDefault(_errors);\n\nvar _errors3 = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\nvar initialErrorIconState = (_initialErrorIconStat = {}, (0, _defineProperty3.default)(_initialErrorIconStat, _errors3.ERROR_ICON_TYPES.NETWORK, []), (0, _defineProperty3.default)(_initialErrorIconStat, _errors3.ERROR_ICON_TYPES.API, []), _initialErrorIconStat);\n\n/**\n * Creates a new Errors reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @param {Object} mergeReducers Optional. Reducers to merge.\n * @return {Function} Errors reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _errors2.default.errors;\n\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.clearError, function (state) {\n    return (0, _extends5.default)({}, state, { alerts: state.alerts.slice(1) });\n  }), (0, _defineProperty3.default)(_handleActions, a.newError, function (state, _ref) {\n    var payload = _ref.payload;\n    return (0, _extends5.default)({}, state, {\n      alerts: [].concat((0, _toConsumableArray3.default)(state.alerts), [{ title: payload.title, details: payload.details }])\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.clearAllErrorIcons, function (state) {\n    return (0, _extends5.default)({}, state, {\n      icons: initialErrorIconState\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.setErrorIcon, function (state, _ref2) {\n    var _ref2$payload = _ref2.payload,\n        id = _ref2$payload.id,\n        title = _ref2$payload.title,\n        message = _ref2$payload.message;\n    return (0, _extends5.default)({}, state, {\n      icons: (0, _extends5.default)({}, state.icons, (0, _defineProperty3.default)({}, id, [].concat((0, _toConsumableArray3.default)(state.icons[id]), [{ title: title, message: message }])))\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.clearErrorIcon, function (state, _ref3) {\n    var id = _ref3.payload.id;\n    return (0, _extends5.default)({}, state, {\n      icons: (0, _extends5.default)({}, state.icons, (0, _defineProperty3.default)({}, id, []))\n    });\n  }), _handleActions), _lodash2.default.defaults(initialState, { alerts: [], icons: initialErrorIconState }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(initialErrorIconState, 'initialErrorIconState', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/errors.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/errors.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/errors.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/errors.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/errors.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _extends4 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends5 = _interopRequireDefault(_extends4);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _initialErrorIconStat; /**\n                            * @module \"reducers.errors\"\n                            * @desc Redux Reducer for application-wide error handling.\n                            *\n                            * Description:\n                            *   Implements state reducers for application-wide error handling.\n                            * @todo Document state segment structure.\n                            */\n\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _errors = __webpack_require__(/*! ../actions/errors */ \"./src/actions/errors.js\");\n\nvar _errors2 = _interopRequireDefault(_errors);\n\nvar _errors3 = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\nvar initialErrorIconState = (_initialErrorIconStat = {}, (0, _defineProperty3.default)(_initialErrorIconStat, _errors3.ERROR_ICON_TYPES.NETWORK, []), (0, _defineProperty3.default)(_initialErrorIconStat, _errors3.ERROR_ICON_TYPES.API, []), _initialErrorIconStat);\n\n/**\n * Creates a new Errors reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @param {Object} mergeReducers Optional. Reducers to merge.\n * @return {Function} Errors reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _errors2.default.errors;\n\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.clearError, function (state) {\n    return (0, _extends5.default)({}, state, { alerts: state.alerts.slice(1) });\n  }), (0, _defineProperty3.default)(_handleActions, a.newError, function (state, _ref) {\n    var payload = _ref.payload;\n    return (0, _extends5.default)({}, state, {\n      alerts: [].concat((0, _toConsumableArray3.default)(state.alerts), [{ title: payload.title, details: payload.details }])\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.clearAllErrorIcons, function (state) {\n    return (0, _extends5.default)({}, state, {\n      icons: initialErrorIconState\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.setErrorIcon, function (state, _ref2) {\n    var _ref2$payload = _ref2.payload,\n        id = _ref2$payload.id,\n        title = _ref2$payload.title,\n        message = _ref2$payload.message;\n    return (0, _extends5.default)({}, state, {\n      icons: (0, _extends5.default)({}, state.icons, (0, _defineProperty3.default)({}, id, [].concat((0, _toConsumableArray3.default)(state.icons[id]), [{ title: title, message: message }])))\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.clearErrorIcon, function (state, _ref3) {\n    var id = _ref3.payload.id;\n    return (0, _extends5.default)({}, state, {\n      icons: (0, _extends5.default)({}, state.icons, (0, _defineProperty3.default)({}, id, []))\n    });\n  }), _handleActions), _lodash2.default.defaults(initialState, { alerts: [], icons: initialErrorIconState }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(initialErrorIconState, 'initialErrorIconState', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/errors.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/errors.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/errors.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/errors.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/errors.js?");
 
 /***/ }),
 
@@ -700,7 +700,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _values = __webpack_require__(/*! babel-runtime/core-js/object/values */ \"babel-runtime/core-js/object/values\");\n\nvar _values2 = _interopRequireDefault(_values);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _groups = __webpack_require__(/*! ../actions/groups */ \"./src/actions/groups.js\");\n\nvar _groups2 = _interopRequireDefault(_groups);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.groups\"\n       * @desc\n       * This reducer handles information related to user-groups.\n       *\n       * Corresponding segment of the Redux state is designed to have the following\n       * fields:\n       *\n       * groups {Object} - Holds loaded information about user groups. Keys of this\n       * object are group IDs, and the values are group data object. To keep the state\n       * flat, and our code efficient; for any group that has sub-groups, subGroups\n       * field is removed, while subGroupsIds {String[]} field is added, and each\n       * sub group data object is added to the groups object.\n       *\n       * loading {Object} - Holds IDs of the groups being loaded. Removing ID from\n       * this object will result in silent discard of the data loaded by the\n       * corresponding GROUPS/GET_DONE action; though such functionality does\n       * not look really necessary at the moment, thus we do not provide an\n       * action to really cancel group loading.\n       * @todo Document state segment structure better.\n       */\n\n/**\n * Private. Given two user group maps, it adds to \"dst\" the root group from\n * \"src\" (specified by \"rootId\"), and all its descendant groups. Any groups\n * in \"src\" not related to the sub-tree of the root group descendants are\n * not added to \"dst\".\n * This function mutates \"dst\"!\n * @param {Object} dst\n * @param {Object} src\n * @param {String} rootId\n */\nfunction mergeGroupTree(dst, src, rootId) {\n  var root = src[rootId];\n  dst[rootId] = root; // eslint-disable-line no-param-reassign\n  if (root.subGroupIds) {\n    root.subGroupIds.forEach(function (id) {\n      return mergeGroupTree(dst, src, id);\n    });\n  }\n}\n\n/**\n * Removes from the state all loaded user groups, and cancels any on-going\n * loading of user groups.\n * @param {Object} state\n * @return {Object} New state.\n */\nfunction onDropGroups(state) {\n  return (0, _extends3.default)({}, state, { groups: {}, loading: {} });\n}\n\n/**\n * Initiates the loading of data on the specified groups.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetGroupsInit(state, _ref) {\n  var payload = _ref.payload;\n\n  var groupIds = _lodash2.default.isArray(payload) ? payload : [payload];\n  var loading = _lodash2.default.clone(state.loading);\n  groupIds.forEach(function (id) {\n    loading[id] = true;\n  });\n  return (0, _extends3.default)({}, state, { loading: loading });\n}\n\n/**\n * Finalizes the loading of data on the specified groups.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetGroupsDone(state, action) {\n  var groups = _lodash2.default.clone(state.groups);\n  var loading = _lodash2.default.clone(state.loading);\n  var loaded = action.payload;\n  (0, _values2.default)(loaded).forEach(function (_ref2) {\n    var id = _ref2.id;\n\n    if (loading[id]) {\n      mergeGroupTree(groups, loaded, id);\n      delete loading[id];\n    }\n  });\n  return (0, _extends3.default)({}, state, { groups: groups, loading: loading });\n}\n\n/**\n * Creates a new Groups reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Groups reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _groups2.default.groups;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.dropGroups, onDropGroups), (0, _defineProperty3.default)(_handleActions, a.getGroupsInit, onGetGroupsInit), (0, _defineProperty3.default)(_handleActions, a.getGroupsDone, onGetGroupsDone), _handleActions), _lodash2.default.defaults(initialState ? _lodash2.default.clone(initialState) : {}, {\n    groups: {},\n    loading: {}\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(mergeGroupTree, 'mergeGroupTree', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(onDropGroups, 'onDropGroups', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(onGetGroupsInit, 'onGetGroupsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(onGetGroupsDone, 'onGetGroupsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/groups.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/groups.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _values = __webpack_require__(/*! babel-runtime/core-js/object/values */ \"babel-runtime/core-js/object/values\");\n\nvar _values2 = _interopRequireDefault(_values);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _groups = __webpack_require__(/*! ../actions/groups */ \"./src/actions/groups.js\");\n\nvar _groups2 = _interopRequireDefault(_groups);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.groups\"\n       * @desc\n       * This reducer handles information related to user-groups.\n       *\n       * Corresponding segment of the Redux state is designed to have the following\n       * fields:\n       *\n       * groups {Object} - Holds loaded information about user groups. Keys of this\n       * object are group IDs, and the values are group data object. To keep the state\n       * flat, and our code efficient; for any group that has sub-groups, subGroups\n       * field is removed, while subGroupsIds {String[]} field is added, and each\n       * sub group data object is added to the groups object.\n       *\n       * loading {Object} - Holds IDs of the groups being loaded. Removing ID from\n       * this object will result in silent discard of the data loaded by the\n       * corresponding GROUPS/GET_DONE action; though such functionality does\n       * not look really necessary at the moment, thus we do not provide an\n       * action to really cancel group loading.\n       * @todo Document state segment structure better.\n       */\n\n/**\n * Private. Given two user group maps, it adds to \"dst\" the root group from\n * \"src\" (specified by \"rootId\"), and all its descendant groups. Any groups\n * in \"src\" not related to the sub-tree of the root group descendants are\n * not added to \"dst\".\n * This function mutates \"dst\"!\n * @param {Object} dst\n * @param {Object} src\n * @param {String} rootId\n */\nfunction mergeGroupTree(dst, src, rootId) {\n  var root = src[rootId];\n  dst[rootId] = root; // eslint-disable-line no-param-reassign\n  if (root.subGroupIds) {\n    root.subGroupIds.forEach(function (id) {\n      return mergeGroupTree(dst, src, id);\n    });\n  }\n}\n\n/**\n * Removes from the state all loaded user groups, and cancels any on-going\n * loading of user groups.\n * @param {Object} state\n * @return {Object} New state.\n */\nfunction onDropGroups(state) {\n  return (0, _extends3.default)({}, state, { groups: {}, loading: {} });\n}\n\n/**\n * Initiates the loading of data on the specified groups.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetGroupsInit(state, _ref) {\n  var payload = _ref.payload;\n\n  var groupIds = _lodash2.default.isArray(payload) ? payload : [payload];\n  var loading = _lodash2.default.clone(state.loading);\n  groupIds.forEach(function (id) {\n    loading[id] = true;\n  });\n  return (0, _extends3.default)({}, state, { loading: loading });\n}\n\n/**\n * Finalizes the loading of data on the specified groups.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetGroupsDone(state, action) {\n  var groups = _lodash2.default.clone(state.groups);\n  var loading = _lodash2.default.clone(state.loading);\n  var loaded = action.payload;\n  (0, _values2.default)(loaded).forEach(function (_ref2) {\n    var id = _ref2.id;\n\n    if (loading[id]) {\n      mergeGroupTree(groups, loaded, id);\n      delete loading[id];\n    }\n  });\n  return (0, _extends3.default)({}, state, { groups: groups, loading: loading });\n}\n\n/**\n * Creates a new Groups reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Groups reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _groups2.default.groups;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.dropGroups, onDropGroups), (0, _defineProperty3.default)(_handleActions, a.getGroupsInit, onGetGroupsInit), (0, _defineProperty3.default)(_handleActions, a.getGroupsDone, onGetGroupsDone), _handleActions), _lodash2.default.defaults(initialState ? _lodash2.default.clone(initialState) : {}, {\n    groups: {},\n    loading: {}\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(mergeGroupTree, 'mergeGroupTree', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(onDropGroups, 'onDropGroups', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(onGetGroupsInit, 'onGetGroupsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(onGetGroupsDone, 'onGetGroupsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/groups.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/groups.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/groups.js?");
 
 /***/ }),
 
@@ -712,7 +712,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.factory = factory;\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _auth = __webpack_require__(/*! ./auth */ \"./src/reducers/auth.js\");\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _stats = __webpack_require__(/*! ./stats */ \"./src/reducers/stats.js\");\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nvar _terms = __webpack_require__(/*! ./terms */ \"./src/reducers/terms.js\");\n\nvar _terms2 = _interopRequireDefault(_terms);\n\nvar _direct = __webpack_require__(/*! ./direct */ \"./src/reducers/direct.js\");\n\nvar _direct2 = _interopRequireDefault(_direct);\n\nvar _groups = __webpack_require__(/*! ./groups */ \"./src/reducers/groups.js\");\n\nvar _groups2 = _interopRequireDefault(_groups);\n\nvar _errors = __webpack_require__(/*! ./errors */ \"./src/reducers/errors.js\");\n\nvar _errors2 = _interopRequireDefault(_errors);\n\nvar _challenge = __webpack_require__(/*! ./challenge */ \"./src/reducers/challenge.js\");\n\nvar _challenge2 = _interopRequireDefault(_challenge);\n\nvar _profile = __webpack_require__(/*! ./profile */ \"./src/reducers/profile.js\");\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nvar _members = __webpack_require__(/*! ./members */ \"./src/reducers/members.js\");\n\nvar _members2 = _interopRequireDefault(_members);\n\nvar _lookup = __webpack_require__(/*! ./lookup */ \"./src/reducers/lookup.js\");\n\nvar _lookup2 = _interopRequireDefault(_lookup);\n\nvar _memberTasks = __webpack_require__(/*! ./member-tasks */ \"./src/reducers/member-tasks.js\");\n\nvar _memberTasks2 = _interopRequireDefault(_memberTasks);\n\nvar _reviewOpportunity = __webpack_require__(/*! ./reviewOpportunity */ \"./src/reducers/reviewOpportunity.js\");\n\nvar _reviewOpportunity2 = _interopRequireDefault(_reviewOpportunity);\n\nvar _mySubmissionsManagement = __webpack_require__(/*! ./my-submissions-management */ \"./src/reducers/my-submissions-management.js\");\n\nvar _mySubmissionsManagement2 = _interopRequireDefault(_mySubmissionsManagement);\n\nvar _settings = __webpack_require__(/*! ./settings */ \"./src/reducers/settings.js\");\n\nvar _settings2 = _interopRequireDefault(_settings);\n\nvar _looker = __webpack_require__(/*! ./looker */ \"./src/reducers/looker.js\");\n\nvar _looker2 = _interopRequireDefault(_looker);\n\nvar _challengeListing = __webpack_require__(/*! ./challenge-listing */ \"./src/reducers/challenge-listing.js\");\n\nvar _challengeListing2 = _interopRequireDefault(_challengeListing);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Export reducers.\n       */\n\n\nfunction factory(options) {\n  return _topcoderReactUtils.redux.resolveReducers({\n    auth: (0, _auth.factory)(options),\n    stats: (0, _stats.factory)(options),\n    terms: (0, _terms.factory)(options),\n    direct: (0, _direct.factory)(options),\n    groups: (0, _groups.factory)(options),\n    errors: (0, _errors.factory)(options),\n    challenge: (0, _challenge.factory)(options),\n    profile: (0, _profile.factory)(options),\n    lookup: (0, _lookup.factory)(options),\n    members: (0, _members.factory)(options),\n    memberTasks: (0, _memberTasks.factory)(options),\n    reviewOpportunity: (0, _reviewOpportunity.factory)(options),\n    mySubmissionsManagement: (0, _mySubmissionsManagement.factory)(options),\n    settings: (0, _settings.factory)(options),\n    looker: (0, _looker.factory)(options),\n    challengeListing: (0, _challengeListing.factory)(options)\n  });\n}\n\nvar _default = {\n  auth: _auth2.default,\n  stats: _stats2.default,\n  terms: _terms2.default,\n  direct: _direct2.default,\n  groups: _groups2.default,\n  errors: _errors2.default,\n  challenge: _challenge2.default,\n  profile: _profile2.default,\n  lookup: _lookup2.default,\n  members: _members2.default,\n  memberTasks: _memberTasks2.default,\n  reviewOpportunity: _reviewOpportunity2.default,\n  mySubmissionsManagement: _mySubmissionsManagement2.default,\n  settings: _settings2.default,\n  looker: _looker2.default,\n  challengeListing: _challengeListing2.default\n};\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/index.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/index.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/index.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.factory = factory;\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _auth = __webpack_require__(/*! ./auth */ \"./src/reducers/auth.js\");\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _stats = __webpack_require__(/*! ./stats */ \"./src/reducers/stats.js\");\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nvar _terms = __webpack_require__(/*! ./terms */ \"./src/reducers/terms.js\");\n\nvar _terms2 = _interopRequireDefault(_terms);\n\nvar _direct = __webpack_require__(/*! ./direct */ \"./src/reducers/direct.js\");\n\nvar _direct2 = _interopRequireDefault(_direct);\n\nvar _groups = __webpack_require__(/*! ./groups */ \"./src/reducers/groups.js\");\n\nvar _groups2 = _interopRequireDefault(_groups);\n\nvar _errors = __webpack_require__(/*! ./errors */ \"./src/reducers/errors.js\");\n\nvar _errors2 = _interopRequireDefault(_errors);\n\nvar _challenge = __webpack_require__(/*! ./challenge */ \"./src/reducers/challenge.js\");\n\nvar _challenge2 = _interopRequireDefault(_challenge);\n\nvar _profile = __webpack_require__(/*! ./profile */ \"./src/reducers/profile.js\");\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nvar _members = __webpack_require__(/*! ./members */ \"./src/reducers/members.js\");\n\nvar _members2 = _interopRequireDefault(_members);\n\nvar _lookup = __webpack_require__(/*! ./lookup */ \"./src/reducers/lookup.js\");\n\nvar _lookup2 = _interopRequireDefault(_lookup);\n\nvar _memberTasks = __webpack_require__(/*! ./member-tasks */ \"./src/reducers/member-tasks.js\");\n\nvar _memberTasks2 = _interopRequireDefault(_memberTasks);\n\nvar _reviewOpportunity = __webpack_require__(/*! ./reviewOpportunity */ \"./src/reducers/reviewOpportunity.js\");\n\nvar _reviewOpportunity2 = _interopRequireDefault(_reviewOpportunity);\n\nvar _mySubmissionsManagement = __webpack_require__(/*! ./my-submissions-management */ \"./src/reducers/my-submissions-management.js\");\n\nvar _mySubmissionsManagement2 = _interopRequireDefault(_mySubmissionsManagement);\n\nvar _settings = __webpack_require__(/*! ./settings */ \"./src/reducers/settings.js\");\n\nvar _settings2 = _interopRequireDefault(_settings);\n\nvar _looker = __webpack_require__(/*! ./looker */ \"./src/reducers/looker.js\");\n\nvar _looker2 = _interopRequireDefault(_looker);\n\nvar _challengeListing = __webpack_require__(/*! ./challenge-listing */ \"./src/reducers/challenge-listing.js\");\n\nvar _challengeListing2 = _interopRequireDefault(_challengeListing);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Export reducers.\n       */\n\n\nfunction factory(options) {\n  return _topcoderReactUtils.redux.resolveReducers({\n    auth: (0, _auth.factory)(options),\n    stats: (0, _stats.factory)(options),\n    terms: (0, _terms.factory)(options),\n    direct: (0, _direct.factory)(options),\n    groups: (0, _groups.factory)(options),\n    errors: (0, _errors.factory)(options),\n    challenge: (0, _challenge.factory)(options),\n    profile: (0, _profile.factory)(options),\n    lookup: (0, _lookup.factory)(options),\n    members: (0, _members.factory)(options),\n    memberTasks: (0, _memberTasks.factory)(options),\n    reviewOpportunity: (0, _reviewOpportunity.factory)(options),\n    mySubmissionsManagement: (0, _mySubmissionsManagement.factory)(options),\n    settings: (0, _settings.factory)(options),\n    looker: (0, _looker.factory)(options),\n    challengeListing: (0, _challengeListing.factory)(options)\n  });\n}\n\nvar _default = {\n  auth: _auth2.default,\n  stats: _stats2.default,\n  terms: _terms2.default,\n  direct: _direct2.default,\n  groups: _groups2.default,\n  errors: _errors2.default,\n  challenge: _challenge2.default,\n  profile: _profile2.default,\n  lookup: _lookup2.default,\n  members: _members2.default,\n  memberTasks: _memberTasks2.default,\n  reviewOpportunity: _reviewOpportunity2.default,\n  mySubmissionsManagement: _mySubmissionsManagement2.default,\n  settings: _settings2.default,\n  looker: _looker2.default,\n  challengeListing: _challengeListing2.default\n};\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/index.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/index.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/index.js?");
 
 /***/ }),
 
@@ -724,7 +724,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _looker = __webpack_require__(/*! ../actions/looker */ \"./src/actions/looker.js\");\n\nvar _looker2 = _interopRequireDefault(_looker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.looker\"\n       * @desc Reducer for {@link module:actions.looker} actions.\n       *\n       * State segment managed by this reducer has the following structure:\n       * @param {Object} dataSet={}, index by lookerId.\n       */\n\n\n/**\n * Handles LOOKER/GET_LOOKER_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetLookerDone(state, _ref) {\n  var payload = _ref.payload;\n  var _payload$data = payload.data,\n      res = _payload$data.res,\n      error = _payload$data.error,\n      lookerId = payload.lookerId;\n\n\n  var newDataSet = (0, _extends3.default)({}, state.dataSet);\n  newDataSet[lookerId] = {\n    lookerData: res,\n    error: error,\n    msg: res.message\n  };\n  return (0, _extends3.default)({}, state, {\n    dataSet: newDataSet\n  });\n}\n\n/**\n * Creates a new Looker reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Looker reducer.\n */\nfunction create() {\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _looker2.default.looker;\n  return (0, _reduxActions.handleActions)((0, _defineProperty3.default)({}, a.getLookerDone, onGetLookerDone), _lodash2.default.defaults(initialState, {\n    dataSet: {}\n  }));\n}\n\n/**\n * Factory which creates a new reducer.\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetLookerDone, 'onGetLookerDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/looker.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/looker.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/looker.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/looker.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/looker.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _looker = __webpack_require__(/*! ../actions/looker */ \"./src/actions/looker.js\");\n\nvar _looker2 = _interopRequireDefault(_looker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.looker\"\n       * @desc Reducer for {@link module:actions.looker} actions.\n       *\n       * State segment managed by this reducer has the following structure:\n       * @param {Object} dataSet={}, index by lookerId.\n       */\n\n\n/**\n * Handles LOOKER/GET_LOOKER_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetLookerDone(state, _ref) {\n  var payload = _ref.payload;\n  var _payload$data = payload.data,\n      res = _payload$data.res,\n      error = _payload$data.error,\n      lookerId = payload.lookerId;\n\n\n  var newDataSet = (0, _extends3.default)({}, state.dataSet);\n  newDataSet[lookerId] = {\n    lookerData: res,\n    error: error,\n    msg: res.message\n  };\n  return (0, _extends3.default)({}, state, {\n    dataSet: newDataSet\n  });\n}\n\n/**\n * Creates a new Looker reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Looker reducer.\n */\nfunction create() {\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _looker2.default.looker;\n  return (0, _reduxActions.handleActions)((0, _defineProperty3.default)({}, a.getLookerDone, onGetLookerDone), _lodash2.default.defaults(initialState, {\n    dataSet: {}\n  }));\n}\n\n/**\n * Factory which creates a new reducer.\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetLookerDone, 'onGetLookerDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/looker.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/looker.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/looker.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/looker.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/looker.js?");
 
 /***/ }),
 
@@ -736,7 +736,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _lookup = __webpack_require__(/*! ../actions/lookup */ \"./src/actions/lookup.js\");\n\nvar _lookup2 = _interopRequireDefault(_lookup);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.lookup\"\n       * @desc Reducer for {@link module:actions.lookup} actions.\n       *\n       * State segment managed by this reducer has the following structure:\n       * @param {Array} skillTags='' skill tags.\n       */\n\n\n/**\n * Handles LOOKUP/GET_SKILL_TAGS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetSkillTagsDone(state, _ref) {\n  var payload = _ref.payload,\n      error = _ref.error;\n\n  if (error) {\n    _logger2.default.error('Failed to get skill tags', payload);\n    return (0, _extends3.default)({}, state, { loadingSkillTagsError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    loadingSkillTagsError: false,\n    skillTags: payload\n  });\n}\n\n/**\n * Handles LOOKUP/GET_COUNTRIES_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetCountriesDone(state, _ref2) {\n  var payload = _ref2.payload,\n      error = _ref2.error;\n\n  if (error) {\n    _logger2.default.error('Failed to get countries', payload);\n    return (0, _extends3.default)({}, state, { loadingCountriesError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    loadingCountriesError: false,\n    countries: payload\n  });\n}\n\n/**\n * Creates a new Lookup reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Lookup reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _lookup2.default.lookup;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.getSkillTagsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getSkillTagsDone, onGetSkillTagsDone), (0, _defineProperty3.default)(_handleActions, a.getCountriesInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getCountriesDone, onGetCountriesDone), _handleActions), _lodash2.default.defaults(initialState, {\n    skillTags: [],\n    countries: []\n  }));\n}\n\n/**\n * Factory which creates a new reducer.\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetSkillTagsDone, 'onGetSkillTagsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/lookup.js');\n  reactHotLoader.register(onGetCountriesDone, 'onGetCountriesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/lookup.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/lookup.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/lookup.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/lookup.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/lookup.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _lookup = __webpack_require__(/*! ../actions/lookup */ \"./src/actions/lookup.js\");\n\nvar _lookup2 = _interopRequireDefault(_lookup);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.lookup\"\n       * @desc Reducer for {@link module:actions.lookup} actions.\n       *\n       * State segment managed by this reducer has the following structure:\n       * @param {Array} skillTags='' skill tags.\n       */\n\n\n/**\n * Handles LOOKUP/GET_SKILL_TAGS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetSkillTagsDone(state, _ref) {\n  var payload = _ref.payload,\n      error = _ref.error;\n\n  if (error) {\n    _logger2.default.error('Failed to get skill tags', payload);\n    return (0, _extends3.default)({}, state, { loadingSkillTagsError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    loadingSkillTagsError: false,\n    skillTags: payload\n  });\n}\n\n/**\n * Handles LOOKUP/GET_COUNTRIES_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetCountriesDone(state, _ref2) {\n  var payload = _ref2.payload,\n      error = _ref2.error;\n\n  if (error) {\n    _logger2.default.error('Failed to get countries', payload);\n    return (0, _extends3.default)({}, state, { loadingCountriesError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    loadingCountriesError: false,\n    countries: payload\n  });\n}\n\n/**\n * Creates a new Lookup reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Lookup reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _lookup2.default.lookup;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.getSkillTagsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getSkillTagsDone, onGetSkillTagsDone), (0, _defineProperty3.default)(_handleActions, a.getCountriesInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getCountriesDone, onGetCountriesDone), _handleActions), _lodash2.default.defaults(initialState, {\n    skillTags: [],\n    countries: []\n  }));\n}\n\n/**\n * Factory which creates a new reducer.\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetSkillTagsDone, 'onGetSkillTagsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/lookup.js');\n  reactHotLoader.register(onGetCountriesDone, 'onGetCountriesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/lookup.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/lookup.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/lookup.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/lookup.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/lookup.js?");
 
 /***/ }),
 
@@ -748,7 +748,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _memberTasks = __webpack_require__(/*! ../actions/member-tasks */ \"./src/actions/member-tasks.js\");\n\nvar _memberTasks2 = _interopRequireDefault(_memberTasks);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reduces.member-tasks\"\n       * @desc Member tasks reducer.\n       * @todo Document state segment structure.\n       */\n/* global alert */\n\n/**\n * Drops all tasks and cancels the ongoing loading operation, if it is pending.\n * @param {Object} state\n * @return {Object} New state.\n */\nfunction onDropAll(state) {\n  return (0, _extends3.default)({}, state, {\n    allLoaded: false,\n    lastRequestedPageNum: -1,\n    loadingUuid: '',\n    tasks: [],\n    timestamp: 0\n  });\n}\n\n/**\n * Stores into the state meta data about the initiated loading operation.\n * This will effectively cancel the already pending loading operation, if any.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetInit(state, _ref) {\n  var payload = _ref.payload;\n\n  return (0, _extends3.default)({}, state, {\n    lastRequestedPageNum: payload.pageNum,\n    loadingUuid: payload.uuid\n  });\n}\n\n/**\n * Handles the actual result of the loading operation.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetDone(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  /* Bails out in case of error. */\n  if (error) {\n    _logger2.default.error(payload);\n    /* NOTE: For now, using alert to inform about failures is kind of fine. */\n    /* eslint-disable no-alert */\n    if (_topcoderReactUtils.isomorphy.isClientSide()) alert('Failed to load member tasks');\n    /* eslint-enable no-alert */\n    return state;\n  }\n\n  /* Silently ignores the action, if it has unexpected UUID. */\n  var projectId = payload.projectId,\n      tasks = payload.tasks,\n      uuid = payload.uuid;\n\n  if (uuid !== state.loadingUuid) return state;\n\n  /* Generates the map of old tasks, and the count of old tasks related to\n   * the specified project. */\n  var taskMap = {};\n  state.tasks.forEach(function (task) {\n    taskMap[task.id] = task;\n  });\n\n  /* Merges newly loaded tasks into the map of old ones. */\n  tasks.forEach(function (task) {\n    taskMap[task.id] = task;\n  });\n\n  /* If the first page of tasks has been loaded, updates its timestamp. */\n  var timestamps = state.timestamps;\n\n  if (!state.lastRequestedPageNum) {\n    timestamps = _lodash2.default.clone(timestamps);\n    timestamps[projectId] = Date.now();\n  }\n\n  return (0, _extends3.default)({}, state, {\n    allLoaded: tasks.length < _memberTasks.PAGE_SIZE,\n    loadingUuid: '',\n    tasks: _lodash2.default.values(taskMap),\n    timestamps: timestamps\n  });\n}\n\n/**\n * Creates a new Member tasks reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Member tasks reducer.\n */\nfunction create() {\n  var _redux$handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _memberTasks2.default.memberTasks;\n  return _topcoderReactUtils.redux.handleActions((_redux$handleActions = {}, (0, _defineProperty3.default)(_redux$handleActions, a.dropAll, onDropAll), (0, _defineProperty3.default)(_redux$handleActions, a.getInit, onGetInit), (0, _defineProperty3.default)(_redux$handleActions, a.getDone, onGetDone), _redux$handleActions), _lodash2.default.defaults(initialState, {\n    /* It is set true when a request to load tasks loads less tasks than a full\n     * task page size. It is reset to false each time the page number 0 starts\n     * to load. If you load task pages sequentially from the very first page,\n     * with the same projectId and user specified by auth token, this flag\n     * signals you when there is no more tasks to load. */\n    allLoaded: false,\n\n    /* Holds the number of the last requested task page. */\n    lastRequestedPageNum: -1,\n\n    /* Equals to the loading operation UUID when the result is pending; equals\n     * empty string when nothing is being loaded. */\n    loadingUuid: '',\n\n    /* The list of tasks loaded so far. For better performance and user\n     * experience it may contain tasks related to projects queried before;\n     * be sure to filter it according to your needs. */\n    tasks: [],\n\n    /* Keys of this object are projectIds, and values keep the timestamps\n     * corresponding to latest updates of the first page of tasks related\n     * to those projects. */\n    timestamps: {}\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onDropAll, 'onDropAll', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(onGetInit, 'onGetInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(onGetDone, 'onGetDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/member-tasks.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/member-tasks.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _memberTasks = __webpack_require__(/*! ../actions/member-tasks */ \"./src/actions/member-tasks.js\");\n\nvar _memberTasks2 = _interopRequireDefault(_memberTasks);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reduces.member-tasks\"\n       * @desc Member tasks reducer.\n       * @todo Document state segment structure.\n       */\n/* global alert */\n\n/**\n * Drops all tasks and cancels the ongoing loading operation, if it is pending.\n * @param {Object} state\n * @return {Object} New state.\n */\nfunction onDropAll(state) {\n  return (0, _extends3.default)({}, state, {\n    allLoaded: false,\n    lastRequestedPageNum: -1,\n    loadingUuid: '',\n    tasks: [],\n    timestamp: 0\n  });\n}\n\n/**\n * Stores into the state meta data about the initiated loading operation.\n * This will effectively cancel the already pending loading operation, if any.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetInit(state, _ref) {\n  var payload = _ref.payload;\n\n  return (0, _extends3.default)({}, state, {\n    lastRequestedPageNum: payload.pageNum,\n    loadingUuid: payload.uuid\n  });\n}\n\n/**\n * Handles the actual result of the loading operation.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetDone(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  /* Bails out in case of error. */\n  if (error) {\n    _logger2.default.error(payload);\n    /* NOTE: For now, using alert to inform about failures is kind of fine. */\n    /* eslint-disable no-alert */\n    if (_topcoderReactUtils.isomorphy.isClientSide()) alert('Failed to load member tasks');\n    /* eslint-enable no-alert */\n    return state;\n  }\n\n  /* Silently ignores the action, if it has unexpected UUID. */\n  var projectId = payload.projectId,\n      tasks = payload.tasks,\n      uuid = payload.uuid;\n\n  if (uuid !== state.loadingUuid) return state;\n\n  /* Generates the map of old tasks, and the count of old tasks related to\n   * the specified project. */\n  var taskMap = {};\n  state.tasks.forEach(function (task) {\n    taskMap[task.id] = task;\n  });\n\n  /* Merges newly loaded tasks into the map of old ones. */\n  tasks.forEach(function (task) {\n    taskMap[task.id] = task;\n  });\n\n  /* If the first page of tasks has been loaded, updates its timestamp. */\n  var timestamps = state.timestamps;\n\n  if (!state.lastRequestedPageNum) {\n    timestamps = _lodash2.default.clone(timestamps);\n    timestamps[projectId] = Date.now();\n  }\n\n  return (0, _extends3.default)({}, state, {\n    allLoaded: tasks.length < _memberTasks.PAGE_SIZE,\n    loadingUuid: '',\n    tasks: _lodash2.default.values(taskMap),\n    timestamps: timestamps\n  });\n}\n\n/**\n * Creates a new Member tasks reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Member tasks reducer.\n */\nfunction create() {\n  var _redux$handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _memberTasks2.default.memberTasks;\n  return _topcoderReactUtils.redux.handleActions((_redux$handleActions = {}, (0, _defineProperty3.default)(_redux$handleActions, a.dropAll, onDropAll), (0, _defineProperty3.default)(_redux$handleActions, a.getInit, onGetInit), (0, _defineProperty3.default)(_redux$handleActions, a.getDone, onGetDone), _redux$handleActions), _lodash2.default.defaults(initialState, {\n    /* It is set true when a request to load tasks loads less tasks than a full\n     * task page size. It is reset to false each time the page number 0 starts\n     * to load. If you load task pages sequentially from the very first page,\n     * with the same projectId and user specified by auth token, this flag\n     * signals you when there is no more tasks to load. */\n    allLoaded: false,\n\n    /* Holds the number of the last requested task page. */\n    lastRequestedPageNum: -1,\n\n    /* Equals to the loading operation UUID when the result is pending; equals\n     * empty string when nothing is being loaded. */\n    loadingUuid: '',\n\n    /* The list of tasks loaded so far. For better performance and user\n     * experience it may contain tasks related to projects queried before;\n     * be sure to filter it according to your needs. */\n    tasks: [],\n\n    /* Keys of this object are projectIds, and values keep the timestamps\n     * corresponding to latest updates of the first page of tasks related\n     * to those projects. */\n    timestamps: {}\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onDropAll, 'onDropAll', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(onGetInit, 'onGetInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(onGetDone, 'onGetDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/member-tasks.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/member-tasks.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/member-tasks.js?");
 
 /***/ }),
 
@@ -760,7 +760,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends20 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends21 = _interopRequireDefault(_extends20);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _members = __webpack_require__(/*! ../actions/members */ \"./src/actions/members.js\");\n\nvar _members2 = _interopRequireDefault(_members);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.members\"\n       * @desc Reducer for the Redux store segment that holds members data.\n       * @todo Document state segment structure.\n       */\n\n/**\n * Drops information about a member.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onDrop(state, _ref) {\n  var payload = _ref.payload;\n\n  if (!state[payload]) return state;\n  return _lodash2.default.omit(state, payload);\n}\n\n/**\n * Drops all loaded information on members.\n * @return {Object} New state.\n */\nfunction onDropAll() {\n  return {};\n}\n\n/**\n * Inits the loading of member achievements.\n * @param {Object} state\n * @param {String} action.handle\n * @param {String} action.uuid\n * @return {Object} New state.\n */\nfunction onGetAchievementsInit(state, action) {\n  var _action$payload = action.payload,\n      handle = _action$payload.handle,\n      uuid = _action$payload.uuid;\n\n  var res = state[handle];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.achievements = { loadingUuid: uuid };\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, res));\n}\n\n/**\n * Finalizes the loading of member achievements.\n * @param {Object} state\n * @param {Object} error\n * @param {Array} payload.data\n * @param {String} payload.handle\n * @param {String} payload.uuid\n * @return {Object} New state.\n */\nfunction onGetAchievementsDone(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to load member achievements', payload);\n    (0, _errors.fireErrorMessage)('Failed to load member achievements');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'achievements.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    achievements: { data: data, timestamp: Date.now() }\n  })));\n}\n\n/**\n * Initializes the loading of member financial information.\n * @param {Object} state\n * @param {String} action.payload.handle\n * @param {String} action.payload.uuid\n * @return {Object} New state.\n */\nfunction onGetFinancesInit(state, action) {\n  var _action$payload2 = action.payload,\n      handle = _action$payload2.handle,\n      uuid = _action$payload2.uuid;\n\n  var envelop = (0, _extends21.default)({}, state[handle] || {}, {\n    finances: {\n      loadingUuid: uuid,\n      timestamp: 0\n    }\n  });\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, envelop));\n}\n\n/**\n * Finalizes a pending loading of member financial information.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetFinancesDone(state, _ref3) {\n  var error = _ref3.error,\n      payload = _ref3.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get user financial info', payload);\n    (0, _errors.fireErrorMessage)('Failed to get user financial info', '');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'finances.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    finances: {\n      data: data,\n      loadingUuid: '',\n      timestamp: Date.now()\n    }\n  })));\n}\n\n/**\n * Inits the loading of member stats.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsInit(state, action) {\n  var _action$payload3 = action.payload,\n      handle = _action$payload3.handle,\n      uuid = _action$payload3.uuid;\n\n  var res = state[handle];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.stats = { loadingUuid: uuid };\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, res));\n}\n\n/**\n * Finalizes the loading of member stats.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsDone(state, _ref4) {\n  var error = _ref4.error,\n      payload = _ref4.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member stats', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member stats', '');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'stats.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    stats: { data: data, timestamp: Date.now() }\n  })));\n}\n\n/**\n * Inits the loading of member stats history.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsHistoryInit(state, action) {\n  var _action$payload4 = action.payload,\n      handle = _action$payload4.handle,\n      uuid = _action$payload4.uuid;\n\n  var res = state[handle];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.statsHistory = { loadingUuid: uuid };\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, res));\n}\n\n/**\n * Finalizes the loading of member stats history.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsHistoryDone(state, _ref5) {\n  var error = _ref5.error,\n      payload = _ref5.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member statsHistory', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member statsHistory', '');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'statsHistory.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    statsHistory: { data: data, timestamp: Date.now() }\n  })));\n}\n\n/**\n * Inits the loading of member stats distribution.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsDistributionInit(state, action) {\n  var _action$payload5 = action.payload,\n      handle = _action$payload5.handle,\n      uuid = _action$payload5.uuid;\n\n  var res = state[handle];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.statsDistribution = { loadingUuid: uuid };\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, res));\n}\n\n/**\n * Finalizes the loading of member stats distribution.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsDistributionDone(state, _ref6) {\n  var error = _ref6.error,\n      payload = _ref6.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member statsDistribution', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member statsDistribution', '');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'statsDistribution.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    statsDistribution: { data: data, timestamp: Date.now() }\n  })));\n}\n\n/**\n * Inits the loading of member active challenges.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetActiveChallengesInit(state, action) {\n  var handle = action.payload.handle;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], { activeChallengesCount: null })));\n}\n\n/**\n * Finalizes the loading of member active challenges.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetActiveChallengesDone(state, _ref7) {\n  var error = _ref7.error,\n      payload = _ref7.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member active challenges', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member active challenges', '');\n    return state;\n  }\n\n  var handle = payload.handle,\n      challenges = payload.challenges;\n\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    activeChallengesCount: challenges.length\n  })));\n}\n\n/**\n * Inits the loading of member subtrack challenges.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetSubtrackChallengesInit(state, _ref8) {\n  var payload = _ref8.payload;\n  var handle = payload.handle,\n      uuid = payload.uuid;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], { loadingSubTrackChallengesUUID: uuid })));\n}\n\n/**\n * Finalizes the loading of member subtrack challenges.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetSubtrackChallengesDone(state, _ref9) {\n  var error = _ref9.error,\n      payload = _ref9.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member subtrack challenges', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member subtrack challenges', '');\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      challenges = payload.challenges,\n      refresh = payload.refresh,\n      handle = payload.handle;\n\n  if (uuid !== state[handle].loadingSubTrackChallengesUUID) return state;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    subtrackChallenges: state[handle].subtrackChallenges && !refresh ? [].concat((0, _toConsumableArray3.default)(state[handle].subtrackChallenges), (0, _toConsumableArray3.default)(challenges)) : challenges,\n    // if current query returns 0 item, mark it completed\n    subtrackChallengesHasMore: challenges && challenges.length > 0,\n    loadingSubTrackChallengesUUID: ''\n  })));\n}\n\n/**\n * Inits the loading of member SRMs.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserSRMInit(state, _ref10) {\n  var payload = _ref10.payload;\n  var handle = payload.handle,\n      uuid = payload.uuid;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], { loadingSRMUUID: uuid })));\n}\n\n/**\n * Finalizes the loading of member SRMs.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserSRMDone(state, _ref11) {\n  var error = _ref11.error,\n      payload = _ref11.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member SRMs', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member SRMs', '');\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      srms = payload.srms,\n      refresh = payload.refresh,\n      handle = payload.handle;\n\n  if (uuid !== state[handle].loadingSRMUUID) return state;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    userSRMs: state[handle].userSRMs && !refresh ? [].concat((0, _toConsumableArray3.default)(state[handle].userSRMs), (0, _toConsumableArray3.default)(srms)) : srms,\n    userSRMHasMore: srms && srms.length > 0, // if current query returns 0 item, mark it completed\n    loadingSRMUUID: ''\n  })));\n}\n\n/**\n * Inits the loading of member marathons.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserMarathonInit(state, _ref12) {\n  var payload = _ref12.payload;\n  var handle = payload.handle,\n      uuid = payload.uuid;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], { loadingMarathonUUID: uuid })));\n}\n\n/**\n * Finalizes the loading of member marathons.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserMarathonDone(state, _ref13) {\n  var error = _ref13.error,\n      payload = _ref13.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member marathons', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member marathons', '');\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      marathons = payload.marathons,\n      refresh = payload.refresh,\n      handle = payload.handle;\n\n  if (uuid !== state[handle].loadingMarathonUUID) return state;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    userMarathons: state[handle].userMarathons && !refresh ? [].concat((0, _toConsumableArray3.default)(state[handle].userMarathons), (0, _toConsumableArray3.default)(marathons.challenges)) : marathons.challenges,\n    // if current query returns 0 item, mark it completed\n    userMarathonHasMore: marathons && marathons.challenges && marathons.challenges.length > 0,\n    loadingMarathonUUID: ''\n  })));\n}\n\n/**\n * Creates a new Members reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Members reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _members2.default.members;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.drop, onDrop), (0, _defineProperty3.default)(_handleActions, a.dropAll, onDropAll), (0, _defineProperty3.default)(_handleActions, a.getAchievementsInit, onGetAchievementsInit), (0, _defineProperty3.default)(_handleActions, a.getAchievementsDone, onGetAchievementsDone), (0, _defineProperty3.default)(_handleActions, a.getAchievementsV3Done, onGetAchievementsDone), (0, _defineProperty3.default)(_handleActions, a.getFinancesInit, onGetFinancesInit), (0, _defineProperty3.default)(_handleActions, a.getFinancesDone, onGetFinancesDone), (0, _defineProperty3.default)(_handleActions, a.getStatsInit, onGetStatsInit), (0, _defineProperty3.default)(_handleActions, a.getStatsDone, onGetStatsDone), (0, _defineProperty3.default)(_handleActions, a.getStatsHistoryInit, onGetStatsHistoryInit), (0, _defineProperty3.default)(_handleActions, a.getStatsHistoryDone, onGetStatsHistoryDone), (0, _defineProperty3.default)(_handleActions, a.getStatsDistributionInit, onGetStatsDistributionInit), (0, _defineProperty3.default)(_handleActions, a.getStatsDistributionDone, onGetStatsDistributionDone), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesInit, onGetActiveChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesDone, onGetActiveChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getSubtrackChallengesInit, onGetSubtrackChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getSubtrackChallengesDone, onGetSubtrackChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getUserSrmInit, onGetUserSRMInit), (0, _defineProperty3.default)(_handleActions, a.getUserSrmDone, onGetUserSRMDone), (0, _defineProperty3.default)(_handleActions, a.getUserMarathonInit, onGetUserMarathonInit), (0, _defineProperty3.default)(_handleActions, a.getUserMarathonDone, onGetUserMarathonDone), _handleActions), initialState);\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onDrop, 'onDrop', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onDropAll, 'onDropAll', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetAchievementsInit, 'onGetAchievementsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetAchievementsDone, 'onGetAchievementsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetFinancesInit, 'onGetFinancesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetFinancesDone, 'onGetFinancesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsInit, 'onGetStatsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsDone, 'onGetStatsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsHistoryInit, 'onGetStatsHistoryInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsHistoryDone, 'onGetStatsHistoryDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsDistributionInit, 'onGetStatsDistributionInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsDistributionDone, 'onGetStatsDistributionDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetActiveChallengesInit, 'onGetActiveChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetActiveChallengesDone, 'onGetActiveChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetSubtrackChallengesInit, 'onGetSubtrackChallengesInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetSubtrackChallengesDone, 'onGetSubtrackChallengesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetUserSRMInit, 'onGetUserSRMInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetUserSRMDone, 'onGetUserSRMDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetUserMarathonInit, 'onGetUserMarathonInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetUserMarathonDone, 'onGetUserMarathonDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/members.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/members.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends20 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends21 = _interopRequireDefault(_extends20);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _members = __webpack_require__(/*! ../actions/members */ \"./src/actions/members.js\");\n\nvar _members2 = _interopRequireDefault(_members);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.members\"\n       * @desc Reducer for the Redux store segment that holds members data.\n       * @todo Document state segment structure.\n       */\n\n/**\n * Drops information about a member.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onDrop(state, _ref) {\n  var payload = _ref.payload;\n\n  if (!state[payload]) return state;\n  return _lodash2.default.omit(state, payload);\n}\n\n/**\n * Drops all loaded information on members.\n * @return {Object} New state.\n */\nfunction onDropAll() {\n  return {};\n}\n\n/**\n * Inits the loading of member achievements.\n * @param {Object} state\n * @param {String} action.handle\n * @param {String} action.uuid\n * @return {Object} New state.\n */\nfunction onGetAchievementsInit(state, action) {\n  var _action$payload = action.payload,\n      handle = _action$payload.handle,\n      uuid = _action$payload.uuid;\n\n  var res = state[handle];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.achievements = { loadingUuid: uuid };\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, res));\n}\n\n/**\n * Finalizes the loading of member achievements.\n * @param {Object} state\n * @param {Object} error\n * @param {Array} payload.data\n * @param {String} payload.handle\n * @param {String} payload.uuid\n * @return {Object} New state.\n */\nfunction onGetAchievementsDone(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to load member achievements', payload);\n    (0, _errors.fireErrorMessage)('Failed to load member achievements');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'achievements.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    achievements: { data: data, timestamp: Date.now() }\n  })));\n}\n\n/**\n * Initializes the loading of member financial information.\n * @param {Object} state\n * @param {String} action.payload.handle\n * @param {String} action.payload.uuid\n * @return {Object} New state.\n */\nfunction onGetFinancesInit(state, action) {\n  var _action$payload2 = action.payload,\n      handle = _action$payload2.handle,\n      uuid = _action$payload2.uuid;\n\n  var envelop = (0, _extends21.default)({}, state[handle] || {}, {\n    finances: {\n      loadingUuid: uuid,\n      timestamp: 0\n    }\n  });\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, envelop));\n}\n\n/**\n * Finalizes a pending loading of member financial information.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetFinancesDone(state, _ref3) {\n  var error = _ref3.error,\n      payload = _ref3.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get user financial info', payload);\n    (0, _errors.fireErrorMessage)('Failed to get user financial info', '');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'finances.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    finances: {\n      data: data,\n      loadingUuid: '',\n      timestamp: Date.now()\n    }\n  })));\n}\n\n/**\n * Inits the loading of member stats.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsInit(state, action) {\n  var _action$payload3 = action.payload,\n      handle = _action$payload3.handle,\n      uuid = _action$payload3.uuid;\n\n  var res = state[handle];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.stats = { loadingUuid: uuid };\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, res));\n}\n\n/**\n * Finalizes the loading of member stats.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsDone(state, _ref4) {\n  var error = _ref4.error,\n      payload = _ref4.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member stats', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member stats', '');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'stats.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    stats: { data: data, timestamp: Date.now() }\n  })));\n}\n\n/**\n * Inits the loading of member stats history.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsHistoryInit(state, action) {\n  var _action$payload4 = action.payload,\n      handle = _action$payload4.handle,\n      uuid = _action$payload4.uuid;\n\n  var res = state[handle];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.statsHistory = { loadingUuid: uuid };\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, res));\n}\n\n/**\n * Finalizes the loading of member stats history.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsHistoryDone(state, _ref5) {\n  var error = _ref5.error,\n      payload = _ref5.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member statsHistory', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member statsHistory', '');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'statsHistory.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    statsHistory: { data: data, timestamp: Date.now() }\n  })));\n}\n\n/**\n * Inits the loading of member stats distribution.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsDistributionInit(state, action) {\n  var _action$payload5 = action.payload,\n      handle = _action$payload5.handle,\n      uuid = _action$payload5.uuid;\n\n  var res = state[handle];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.statsDistribution = { loadingUuid: uuid };\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, res));\n}\n\n/**\n * Finalizes the loading of member stats distribution.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetStatsDistributionDone(state, _ref6) {\n  var error = _ref6.error,\n      payload = _ref6.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member statsDistribution', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member statsDistribution', '');\n    return state;\n  }\n\n  var data = payload.data,\n      handle = payload.handle,\n      uuid = payload.uuid;\n\n  if (uuid !== _lodash2.default.get(state[handle], 'statsDistribution.loadingUuid')) return state;\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    statsDistribution: { data: data, timestamp: Date.now() }\n  })));\n}\n\n/**\n * Inits the loading of member active challenges.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetActiveChallengesInit(state, action) {\n  var handle = action.payload.handle;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], { activeChallengesCount: null })));\n}\n\n/**\n * Finalizes the loading of member active challenges.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetActiveChallengesDone(state, _ref7) {\n  var error = _ref7.error,\n      payload = _ref7.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member active challenges', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member active challenges', '');\n    return state;\n  }\n\n  var handle = payload.handle,\n      challenges = payload.challenges;\n\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    activeChallengesCount: challenges.length\n  })));\n}\n\n/**\n * Inits the loading of member subtrack challenges.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetSubtrackChallengesInit(state, _ref8) {\n  var payload = _ref8.payload;\n  var handle = payload.handle,\n      uuid = payload.uuid;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], { loadingSubTrackChallengesUUID: uuid })));\n}\n\n/**\n * Finalizes the loading of member subtrack challenges.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetSubtrackChallengesDone(state, _ref9) {\n  var error = _ref9.error,\n      payload = _ref9.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member subtrack challenges', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member subtrack challenges', '');\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      challenges = payload.challenges,\n      refresh = payload.refresh,\n      handle = payload.handle;\n\n  if (uuid !== state[handle].loadingSubTrackChallengesUUID) return state;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    subtrackChallenges: state[handle].subtrackChallenges && !refresh ? [].concat((0, _toConsumableArray3.default)(state[handle].subtrackChallenges), (0, _toConsumableArray3.default)(challenges)) : challenges,\n    // if current query returns 0 item, mark it completed\n    subtrackChallengesHasMore: challenges && challenges.length > 0,\n    loadingSubTrackChallengesUUID: ''\n  })));\n}\n\n/**\n * Inits the loading of member SRMs.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserSRMInit(state, _ref10) {\n  var payload = _ref10.payload;\n  var handle = payload.handle,\n      uuid = payload.uuid;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], { loadingSRMUUID: uuid })));\n}\n\n/**\n * Finalizes the loading of member SRMs.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserSRMDone(state, _ref11) {\n  var error = _ref11.error,\n      payload = _ref11.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member SRMs', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member SRMs', '');\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      srms = payload.srms,\n      refresh = payload.refresh,\n      handle = payload.handle;\n\n  if (uuid !== state[handle].loadingSRMUUID) return state;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    userSRMs: state[handle].userSRMs && !refresh ? [].concat((0, _toConsumableArray3.default)(state[handle].userSRMs), (0, _toConsumableArray3.default)(srms)) : srms,\n    userSRMHasMore: srms && srms.length > 0, // if current query returns 0 item, mark it completed\n    loadingSRMUUID: ''\n  })));\n}\n\n/**\n * Inits the loading of member marathons.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserMarathonInit(state, _ref12) {\n  var payload = _ref12.payload;\n  var handle = payload.handle,\n      uuid = payload.uuid;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], { loadingMarathonUUID: uuid })));\n}\n\n/**\n * Finalizes the loading of member marathons.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetUserMarathonDone(state, _ref13) {\n  var error = _ref13.error,\n      payload = _ref13.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get member marathons', payload);\n    (0, _errors.fireErrorMessage)('Failed to get member marathons', '');\n    return state;\n  }\n\n  var uuid = payload.uuid,\n      marathons = payload.marathons,\n      refresh = payload.refresh,\n      handle = payload.handle;\n\n  if (uuid !== state[handle].loadingMarathonUUID) return state;\n\n  return (0, _extends21.default)({}, state, (0, _defineProperty3.default)({}, handle, (0, _extends21.default)({}, state[handle], {\n    userMarathons: state[handle].userMarathons && !refresh ? [].concat((0, _toConsumableArray3.default)(state[handle].userMarathons), (0, _toConsumableArray3.default)(marathons.challenges)) : marathons.challenges,\n    // if current query returns 0 item, mark it completed\n    userMarathonHasMore: marathons && marathons.challenges && marathons.challenges.length > 0,\n    loadingMarathonUUID: ''\n  })));\n}\n\n/**\n * Creates a new Members reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Members reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _members2.default.members;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.drop, onDrop), (0, _defineProperty3.default)(_handleActions, a.dropAll, onDropAll), (0, _defineProperty3.default)(_handleActions, a.getAchievementsInit, onGetAchievementsInit), (0, _defineProperty3.default)(_handleActions, a.getAchievementsDone, onGetAchievementsDone), (0, _defineProperty3.default)(_handleActions, a.getAchievementsV3Done, onGetAchievementsDone), (0, _defineProperty3.default)(_handleActions, a.getFinancesInit, onGetFinancesInit), (0, _defineProperty3.default)(_handleActions, a.getFinancesDone, onGetFinancesDone), (0, _defineProperty3.default)(_handleActions, a.getStatsInit, onGetStatsInit), (0, _defineProperty3.default)(_handleActions, a.getStatsDone, onGetStatsDone), (0, _defineProperty3.default)(_handleActions, a.getStatsHistoryInit, onGetStatsHistoryInit), (0, _defineProperty3.default)(_handleActions, a.getStatsHistoryDone, onGetStatsHistoryDone), (0, _defineProperty3.default)(_handleActions, a.getStatsDistributionInit, onGetStatsDistributionInit), (0, _defineProperty3.default)(_handleActions, a.getStatsDistributionDone, onGetStatsDistributionDone), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesInit, onGetActiveChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getActiveChallengesDone, onGetActiveChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getSubtrackChallengesInit, onGetSubtrackChallengesInit), (0, _defineProperty3.default)(_handleActions, a.getSubtrackChallengesDone, onGetSubtrackChallengesDone), (0, _defineProperty3.default)(_handleActions, a.getUserSrmInit, onGetUserSRMInit), (0, _defineProperty3.default)(_handleActions, a.getUserSrmDone, onGetUserSRMDone), (0, _defineProperty3.default)(_handleActions, a.getUserMarathonInit, onGetUserMarathonInit), (0, _defineProperty3.default)(_handleActions, a.getUserMarathonDone, onGetUserMarathonDone), _handleActions), initialState);\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onDrop, 'onDrop', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onDropAll, 'onDropAll', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetAchievementsInit, 'onGetAchievementsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetAchievementsDone, 'onGetAchievementsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetFinancesInit, 'onGetFinancesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetFinancesDone, 'onGetFinancesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsInit, 'onGetStatsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsDone, 'onGetStatsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsHistoryInit, 'onGetStatsHistoryInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsHistoryDone, 'onGetStatsHistoryDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsDistributionInit, 'onGetStatsDistributionInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetStatsDistributionDone, 'onGetStatsDistributionDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetActiveChallengesInit, 'onGetActiveChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetActiveChallengesDone, 'onGetActiveChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetSubtrackChallengesInit, 'onGetSubtrackChallengesInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetSubtrackChallengesDone, 'onGetSubtrackChallengesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetUserSRMInit, 'onGetUserSRMInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetUserSRMDone, 'onGetUserSRMDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetUserMarathonInit, 'onGetUserMarathonInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(onGetUserMarathonDone, 'onGetUserMarathonDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/members.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/members.js?");
 
 /***/ }),
 
@@ -772,7 +772,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _smp = __webpack_require__(/*! ../actions/smp */ \"./src/actions/smp.js\");\n\nvar _smp2 = _interopRequireDefault(_smp);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.my-submissions-management\"\n       * @desc  This reducer and corresponding actions control the logic for\n       *  submission management.\n       * @todo Document state segment structure.\n       */\n\n\n/**\n * Creates a new Submission management reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Submission management reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, _smp2.default.smp.deleteSubmissionDone, function (state) {\n    return (0, _extends3.default)({}, state, {\n      deletingSubmission: false\n    });\n  }), (0, _defineProperty3.default)(_handleActions, _smp2.default.smp.deleteSubmissionInit, function (state) {\n    return (0, _extends3.default)({}, state, {\n      deletingSubmission: true\n    });\n  }), _handleActions), _lodash2.default.defaults(initialState, {}));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/my-submissions-management.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/my-submissions-management.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/my-submissions-management.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/my-submissions-management.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _smp = __webpack_require__(/*! ../actions/smp */ \"./src/actions/smp.js\");\n\nvar _smp2 = _interopRequireDefault(_smp);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.my-submissions-management\"\n       * @desc  This reducer and corresponding actions control the logic for\n       *  submission management.\n       * @todo Document state segment structure.\n       */\n\n\n/**\n * Creates a new Submission management reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Submission management reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, _smp2.default.smp.deleteSubmissionDone, function (state) {\n    return (0, _extends3.default)({}, state, {\n      deletingSubmission: false\n    });\n  }), (0, _defineProperty3.default)(_handleActions, _smp2.default.smp.deleteSubmissionInit, function (state) {\n    return (0, _extends3.default)({}, state, {\n      deletingSubmission: true\n    });\n  }), _handleActions), _lodash2.default.defaults(initialState, {}));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/my-submissions-management.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/my-submissions-management.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/my-submissions-management.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/my-submissions-management.js?");
 
 /***/ }),
 
@@ -784,7 +784,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _profile = __webpack_require__(/*! ../actions/profile */ \"./src/actions/profile.js\");\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.profile\"\n       * @desc Reducer for Profile API data\n       * @todo Document reducer state structure.\n       */\n\n\n/**\n * Handles PROFILE/GET_ACHIEVEMENTS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetAchievementsDone(state, _ref) {\n  var payload = _ref.payload,\n      error = _ref.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    achievements: payload.Achievements,\n    copilot: payload.copilot,\n    country: payload.country,\n    loadingError: false\n  });\n}\n\n/**\n * Handles PROFILE/GET_ACHIEVEMENTS_V3_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetAchievementsV3Done(state, _ref2) {\n  var payload = _ref2.payload,\n      error = _ref2.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    achievements: payload.achievements || [],\n    copilot: payload.copilot,\n    country: payload.country,\n    loadingError: false\n  });\n}\n\n/**\n * Handles PROFILE/GET_EXTERNAL_ACCOUNTS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetExternalAccountsDone(state, _ref3) {\n  var payload = _ref3.payload,\n      error = _ref3.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    externalAccounts: payload\n  });\n}\n\n/**\n * Handles PROFILE/GET_EXTERNAL_LINKS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetExternalLinksDone(state, _ref4) {\n  var payload = _ref4.payload,\n      error = _ref4.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    externalLinks: payload\n  });\n}\n\n/**\n * Handles PROFILE/GET_INFO_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetInfoDone(state, _ref5) {\n  var payload = _ref5.payload,\n      error = _ref5.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { info: payload, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_SKILLS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetSkillsDone(state, _ref6) {\n  var payload = _ref6.payload,\n      error = _ref6.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { skills: payload.skills, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_STATS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetStatsDone(state, _ref7) {\n  var payload = _ref7.payload,\n      error = _ref7.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { stats: payload, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_LINKED_ACCOUNTS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetLinkedAccountsDone(state, _ref8) {\n  var payload = _ref8.payload,\n      error = _ref8.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { linkedAccounts: payload.profiles, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_CREDENTIAL_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetCredentialDone(state, _ref9) {\n  var payload = _ref9.payload,\n      error = _ref9.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { credential: payload.credential, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_EMAIL_PREFERENCES_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetEmailPreferencesDone(state, _ref10) {\n  var payload = _ref10.payload,\n      error = _ref10.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { emailPreferences: payload.subscriptions, loadingError: false });\n}\n\n/**\n * Handles PROFILE/UPLOAD_PHOTO_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onUploadPhotoDone(state, _ref11) {\n  var payload = _ref11.payload,\n      error = _ref11.error;\n\n  var newState = (0, _extends3.default)({}, state, { uploadingPhoto: false });\n\n  if (error) {\n    _logger2.default.error('Failed to upload user photo', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to upload photo!');\n    return newState;\n  }\n\n  if (!newState.info || newState.info.handle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    info: (0, _extends3.default)({}, newState.info, {\n      photoURL: payload.photoURL\n    })\n  });\n}\n\n/**\n * Handles PROFILE/DELETE_PHOTO_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onDeletePhotoDone(state, _ref12) {\n  var payload = _ref12.payload,\n      error = _ref12.error;\n\n  var newState = (0, _extends3.default)({}, state, { deletingPhoto: false });\n\n  if (error) {\n    _logger2.default.error('Failed to delete user photo', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to delete photo!');\n    return newState;\n  }\n\n  if (!newState.info || newState.info.handle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    info: (0, _extends3.default)({}, newState.info, {\n      photoURL: null\n    })\n  });\n}\n\n/**\n * Handles PROFILE/UPDATE_PROFILE_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onUpdateProfileDone(state, _ref13) {\n  var payload = _ref13.payload,\n      error = _ref13.error;\n\n  var newState = (0, _extends3.default)({}, state, { updatingProfile: false });\n\n  if (payload.isEmailConflict) {\n    return (0, _extends3.default)({}, newState, {\n      isEmailConflict: true,\n      updateProfileSuccess: false\n    });\n  }\n\n  if (error) {\n    _logger2.default.error('Failed to update user profile', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to update user profile!');\n    return (0, _extends3.default)({}, newState, {\n      updateProfileSuccess: false\n    });\n  }\n\n  if (!newState.info || newState.info.handle !== payload.handle) {\n    return (0, _extends3.default)({}, newState, {\n      updateProfileSuccess: true\n    });\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    info: (0, _extends3.default)({}, newState.info, payload),\n    updateProfileSuccess: true\n  });\n}\n\n/**\n * Handles PROFILE/ADD_SKILL_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onAddSkillDone(state, _ref14) {\n  var payload = _ref14.payload,\n      error = _ref14.error;\n\n  var newState = (0, _extends3.default)({}, state, { addingSkill: false });\n\n  if (error) {\n    _logger2.default.error('Failed to add user skill', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to add user skill!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    skills: payload.skills\n  });\n}\n\n/**\n * Handles PROFILE/HIDE_SKILL_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onHideSkillDone(state, _ref15) {\n  var payload = _ref15.payload,\n      error = _ref15.error;\n\n  var newState = (0, _extends3.default)({}, state, { hidingSkill: false });\n\n  if (error) {\n    _logger2.default.error('Failed to remove user skill', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to remove user skill!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    skills: payload.skills\n  });\n}\n\n/**\n * Handles PROFILE/ADD_WEB_LINK_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onAddWebLinkDone(state, _ref16) {\n  var payload = _ref16.payload,\n      error = _ref16.error;\n\n  var newState = (0, _extends3.default)({}, state, { addingWebLink: false });\n\n  if (error) {\n    _logger2.default.error('Failed to add web link', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to add web link!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle || !payload.data) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    externalLinks: [].concat((0, _toConsumableArray3.default)(newState.externalLinks), [payload.data])\n  });\n}\n\n/**\n * Handles PROFILE/DELETE_WEB_LINK_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onDeleteWebLinkDone(state, _ref17) {\n  var payload = _ref17.payload,\n      error = _ref17.error;\n\n  var newState = (0, _extends3.default)({}, state, { deletingWebLink: false });\n\n  if (error) {\n    _logger2.default.error('Failed to delete web link', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to delete web link!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle || !payload.data) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    externalLinks: _lodash2.default.filter(newState.externalLinks, function (el) {\n      return el.key !== payload.data.key;\n    })\n  });\n}\n\n/**\n * Handles PROFILE/LINK_EXTERNAL_ACCOUNT_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onLinkExternalAccountDone(state, _ref18) {\n  var payload = _ref18.payload,\n      error = _ref18.error;\n\n  var newState = (0, _extends3.default)({}, state, { linkingExternalAccount: false });\n\n  if (error) {\n    _logger2.default.error('Failed to link external account', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to link external account!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle || !payload.data) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    linkedAccounts: [].concat((0, _toConsumableArray3.default)(newState.linkedAccounts), [payload.data])\n  });\n}\n\n/**\n * Handles PROFILE/UNLINK_EXTERNAL_ACCOUNT_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onUnlinkExternalAccountDone(state, _ref19) {\n  var payload = _ref19.payload,\n      error = _ref19.error;\n\n  var newState = (0, _extends3.default)({}, state, { unlinkingExternalAccount: false });\n\n  if (error) {\n    _logger2.default.error('Failed to unlink external account', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to unlink external account!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    linkedAccounts: _lodash2.default.filter(newState.linkedAccounts, function (el) {\n      return el.providerType !== payload.providerType;\n    })\n  });\n}\n\n/**\n * Handles PROFILE/SAVE_EMAIL_PREFERENCES_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onSaveEmailPreferencesDone(state, _ref20) {\n  var payload = _ref20.payload,\n      error = _ref20.error;\n\n  var newState = (0, _extends3.default)({}, state, { savingEmailPreferences: false });\n\n  if (error) {\n    _logger2.default.error('Failed to save email preferences', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to save email preferences!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    emailPreferences: payload.preferences\n  });\n}\n\n/**\n * Handles PROFILE/UPDATE_PASSWORD_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onUpdatePasswordDone(state, _ref21) {\n  var payload = _ref21.payload,\n      error = _ref21.error;\n\n  var newState = (0, _extends3.default)({}, state, { updatingPassword: false });\n\n  if (error) {\n    _logger2.default.error('Failed to update password', payload);\n    (0, _errors.fireErrorMessage)('The old password is invalid');\n  }\n  return newState;\n}\n\n/**\n * Handles PROFILE/VERIFY_MEMBER_NEW_EMAIL_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onVerifyMemberNewEmailDone(state, _ref22) {\n  var payload = _ref22.payload,\n      error = _ref22.error;\n\n  var newState = (0, _extends3.default)({}, state, { verifyingEmail: false });\n\n  if (error) {\n    _logger2.default.error('Failed to verify member new email', payload);\n    return (0, _extends3.default)({}, newState, {\n      verifyError: true\n    });\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    verifyError: false,\n    emailChangeResult: payload.data\n  });\n}\n\n/**\n * Handles UPDATE_EMAIL_CONFLICT action\n * @param {Object} state\n * @param {Object} action Payload will be a boolean value\n * @return {Object} New state\n */\nfunction onUpdateEmailConflict(state, _ref23) {\n  var payload = _ref23.payload;\n\n  return (0, _extends3.default)({}, state, {\n    isEmailConflict: payload\n  });\n}\n\n/**\n * Creates a new Profile reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Profile reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _profile2.default.profile;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.clearProfile, function (state) {\n    return (0, _extends3.default)({}, state, { achievements: null, country: '', info: null, skills: null, stats: null\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.loadProfile, function (state, action) {\n    return (0, _extends3.default)({}, state, { profileForHandle: action.payload });\n  }), (0, _defineProperty3.default)(_handleActions, a.getAchievementsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getAchievementsDone, onGetAchievementsDone), (0, _defineProperty3.default)(_handleActions, a.getAchievementsV3Done, onGetAchievementsV3Done), (0, _defineProperty3.default)(_handleActions, a.getExternalAccountsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getExternalAccountsDone, onGetExternalAccountsDone), (0, _defineProperty3.default)(_handleActions, a.getExternalLinksInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getExternalLinksDone, onGetExternalLinksDone), (0, _defineProperty3.default)(_handleActions, a.getInfoInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getInfoDone, onGetInfoDone), (0, _defineProperty3.default)(_handleActions, a.getSkillsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getSkillsDone, onGetSkillsDone), (0, _defineProperty3.default)(_handleActions, a.getStatsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getStatsDone, onGetStatsDone), (0, _defineProperty3.default)(_handleActions, a.getLinkedAccountsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getLinkedAccountsDone, onGetLinkedAccountsDone), (0, _defineProperty3.default)(_handleActions, a.uploadPhotoInit, function (state) {\n    return (0, _extends3.default)({}, state, { uploadingPhoto: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.uploadPhotoDone, onUploadPhotoDone), (0, _defineProperty3.default)(_handleActions, a.deletePhotoInit, function (state) {\n    return (0, _extends3.default)({}, state, { deletingPhoto: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.deletePhotoDone, onDeletePhotoDone), (0, _defineProperty3.default)(_handleActions, a.updateProfileInit, function (state) {\n    return (0, _extends3.default)({}, state, { updatingProfile: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.updateProfileDone, onUpdateProfileDone), (0, _defineProperty3.default)(_handleActions, a.addSkillInit, function (state) {\n    return (0, _extends3.default)({}, state, { addingSkill: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.addSkillDone, onAddSkillDone), (0, _defineProperty3.default)(_handleActions, a.hideSkillInit, function (state) {\n    return (0, _extends3.default)({}, state, { hidingSkill: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.hideSkillDone, onHideSkillDone), (0, _defineProperty3.default)(_handleActions, a.addWebLinkInit, function (state) {\n    return (0, _extends3.default)({}, state, { addingWebLink: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.addWebLinkDone, onAddWebLinkDone), (0, _defineProperty3.default)(_handleActions, a.deleteWebLinkInit, function (state) {\n    return (0, _extends3.default)({}, state, { deletingWebLink: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.deleteWebLinkDone, onDeleteWebLinkDone), (0, _defineProperty3.default)(_handleActions, a.linkExternalAccountInit, function (state) {\n    return (0, _extends3.default)({}, state, { linkingExternalAccount: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.linkExternalAccountDone, onLinkExternalAccountDone), (0, _defineProperty3.default)(_handleActions, a.unlinkExternalAccountInit, function (state) {\n    return (0, _extends3.default)({}, state, { unlinkingExternalAccount: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.unlinkExternalAccountDone, onUnlinkExternalAccountDone), (0, _defineProperty3.default)(_handleActions, a.getCredentialInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getCredentialDone, onGetCredentialDone), (0, _defineProperty3.default)(_handleActions, a.getEmailPreferencesInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getEmailPreferencesDone, onGetEmailPreferencesDone), (0, _defineProperty3.default)(_handleActions, a.saveEmailPreferencesInit, function (state) {\n    return (0, _extends3.default)({}, state, { savingEmailPreferences: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.saveEmailPreferencesDone, onSaveEmailPreferencesDone), (0, _defineProperty3.default)(_handleActions, a.updatePasswordInit, function (state) {\n    return (0, _extends3.default)({}, state, { updatingPassword: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.updatePasswordDone, onUpdatePasswordDone), (0, _defineProperty3.default)(_handleActions, a.verifyMemberNewEmailInit, function (state) {\n    return (0, _extends3.default)({}, state, { verifyingEmail: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.verifyMemberNewEmailDone, onVerifyMemberNewEmailDone), (0, _defineProperty3.default)(_handleActions, a.updateEmailConflict, onUpdateEmailConflict), _handleActions), _lodash2.default.defaults(initialState, {\n    achievements: null,\n    copilot: false,\n    country: '',\n    info: null,\n    loadingError: false,\n    skills: null,\n    stats: null,\n    verifyError: null,\n    updateProfileSuccess: null\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @returns {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/* Reducer with the default initial state. */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetAchievementsDone, 'onGetAchievementsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetAchievementsV3Done, 'onGetAchievementsV3Done', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetExternalAccountsDone, 'onGetExternalAccountsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetExternalLinksDone, 'onGetExternalLinksDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetInfoDone, 'onGetInfoDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetSkillsDone, 'onGetSkillsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetStatsDone, 'onGetStatsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetLinkedAccountsDone, 'onGetLinkedAccountsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetCredentialDone, 'onGetCredentialDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetEmailPreferencesDone, 'onGetEmailPreferencesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUploadPhotoDone, 'onUploadPhotoDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onDeletePhotoDone, 'onDeletePhotoDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUpdateProfileDone, 'onUpdateProfileDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onAddSkillDone, 'onAddSkillDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onHideSkillDone, 'onHideSkillDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onAddWebLinkDone, 'onAddWebLinkDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onDeleteWebLinkDone, 'onDeleteWebLinkDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onLinkExternalAccountDone, 'onLinkExternalAccountDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUnlinkExternalAccountDone, 'onUnlinkExternalAccountDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onSaveEmailPreferencesDone, 'onSaveEmailPreferencesDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUpdatePasswordDone, 'onUpdatePasswordDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onVerifyMemberNewEmailDone, 'onVerifyMemberNewEmailDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUpdateEmailConflict, 'onUpdateEmailConflict', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/profile.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/profile.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _profile = __webpack_require__(/*! ../actions/profile */ \"./src/actions/profile.js\");\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.profile\"\n       * @desc Reducer for Profile API data\n       * @todo Document reducer state structure.\n       */\n\n\n/**\n * Handles PROFILE/GET_ACHIEVEMENTS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetAchievementsDone(state, _ref) {\n  var payload = _ref.payload,\n      error = _ref.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    achievements: payload.Achievements,\n    copilot: payload.copilot,\n    country: payload.country,\n    loadingError: false\n  });\n}\n\n/**\n * Handles PROFILE/GET_ACHIEVEMENTS_V3_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetAchievementsV3Done(state, _ref2) {\n  var payload = _ref2.payload,\n      error = _ref2.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    achievements: payload.achievements || [],\n    copilot: payload.copilot,\n    country: payload.country,\n    loadingError: false\n  });\n}\n\n/**\n * Handles PROFILE/GET_EXTERNAL_ACCOUNTS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetExternalAccountsDone(state, _ref3) {\n  var payload = _ref3.payload,\n      error = _ref3.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    externalAccounts: payload\n  });\n}\n\n/**\n * Handles PROFILE/GET_EXTERNAL_LINKS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetExternalLinksDone(state, _ref4) {\n  var payload = _ref4.payload,\n      error = _ref4.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    externalLinks: payload\n  });\n}\n\n/**\n * Handles PROFILE/GET_INFO_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetInfoDone(state, _ref5) {\n  var payload = _ref5.payload,\n      error = _ref5.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { info: payload, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_SKILLS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetSkillsDone(state, _ref6) {\n  var payload = _ref6.payload,\n      error = _ref6.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { skills: payload.skills, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_STATS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetStatsDone(state, _ref7) {\n  var payload = _ref7.payload,\n      error = _ref7.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { stats: payload, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_LINKED_ACCOUNTS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetLinkedAccountsDone(state, _ref8) {\n  var payload = _ref8.payload,\n      error = _ref8.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { linkedAccounts: payload.profiles, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_CREDENTIAL_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetCredentialDone(state, _ref9) {\n  var payload = _ref9.payload,\n      error = _ref9.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { credential: payload.credential, loadingError: false });\n}\n\n/**\n * Handles PROFILE/GET_EMAIL_PREFERENCES_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetEmailPreferencesDone(state, _ref10) {\n  var payload = _ref10.payload,\n      error = _ref10.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, { loadingError: true });\n  }\n\n  return (0, _extends3.default)({}, state, { emailPreferences: payload.subscriptions, loadingError: false });\n}\n\n/**\n * Handles PROFILE/UPLOAD_PHOTO_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onUploadPhotoDone(state, _ref11) {\n  var payload = _ref11.payload,\n      error = _ref11.error;\n\n  var newState = (0, _extends3.default)({}, state, { uploadingPhoto: false });\n\n  if (error) {\n    _logger2.default.error('Failed to upload user photo', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to upload photo!');\n    return newState;\n  }\n\n  if (!newState.info || newState.info.handle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    info: (0, _extends3.default)({}, newState.info, {\n      photoURL: payload.photoURL\n    })\n  });\n}\n\n/**\n * Handles PROFILE/DELETE_PHOTO_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onDeletePhotoDone(state, _ref12) {\n  var payload = _ref12.payload,\n      error = _ref12.error;\n\n  var newState = (0, _extends3.default)({}, state, { deletingPhoto: false });\n\n  if (error) {\n    _logger2.default.error('Failed to delete user photo', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to delete photo!');\n    return newState;\n  }\n\n  if (!newState.info || newState.info.handle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    info: (0, _extends3.default)({}, newState.info, {\n      photoURL: null\n    })\n  });\n}\n\n/**\n * Handles PROFILE/UPDATE_PROFILE_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onUpdateProfileDone(state, _ref13) {\n  var payload = _ref13.payload,\n      error = _ref13.error;\n\n  var newState = (0, _extends3.default)({}, state, { updatingProfile: false });\n\n  if (payload.isEmailConflict) {\n    return (0, _extends3.default)({}, newState, {\n      isEmailConflict: true,\n      updateProfileSuccess: false\n    });\n  }\n\n  if (error) {\n    _logger2.default.error('Failed to update user profile', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to update user profile!');\n    return (0, _extends3.default)({}, newState, {\n      updateProfileSuccess: false\n    });\n  }\n\n  if (!newState.info || newState.info.handle !== payload.handle) {\n    return (0, _extends3.default)({}, newState, {\n      updateProfileSuccess: true\n    });\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    info: (0, _extends3.default)({}, newState.info, payload),\n    updateProfileSuccess: true\n  });\n}\n\n/**\n * Handles PROFILE/ADD_SKILL_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onAddSkillDone(state, _ref14) {\n  var payload = _ref14.payload,\n      error = _ref14.error;\n\n  var newState = (0, _extends3.default)({}, state, { addingSkill: false });\n\n  if (error) {\n    _logger2.default.error('Failed to add user skill', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to add user skill!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    skills: payload.skills\n  });\n}\n\n/**\n * Handles PROFILE/HIDE_SKILL_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onHideSkillDone(state, _ref15) {\n  var payload = _ref15.payload,\n      error = _ref15.error;\n\n  var newState = (0, _extends3.default)({}, state, { hidingSkill: false });\n\n  if (error) {\n    _logger2.default.error('Failed to remove user skill', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to remove user skill!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    skills: payload.skills\n  });\n}\n\n/**\n * Handles PROFILE/ADD_WEB_LINK_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onAddWebLinkDone(state, _ref16) {\n  var payload = _ref16.payload,\n      error = _ref16.error;\n\n  var newState = (0, _extends3.default)({}, state, { addingWebLink: false });\n\n  if (error) {\n    _logger2.default.error('Failed to add web link', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to add web link!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle || !payload.data) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    externalLinks: [].concat((0, _toConsumableArray3.default)(newState.externalLinks), [payload.data])\n  });\n}\n\n/**\n * Handles PROFILE/DELETE_WEB_LINK_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onDeleteWebLinkDone(state, _ref17) {\n  var payload = _ref17.payload,\n      error = _ref17.error;\n\n  var newState = (0, _extends3.default)({}, state, { deletingWebLink: false });\n\n  if (error) {\n    _logger2.default.error('Failed to delete web link', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to delete web link!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle || !payload.data) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    externalLinks: _lodash2.default.filter(newState.externalLinks, function (el) {\n      return el.key !== payload.data.key;\n    })\n  });\n}\n\n/**\n * Handles PROFILE/LINK_EXTERNAL_ACCOUNT_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onLinkExternalAccountDone(state, _ref18) {\n  var payload = _ref18.payload,\n      error = _ref18.error;\n\n  var newState = (0, _extends3.default)({}, state, { linkingExternalAccount: false });\n\n  if (error) {\n    _logger2.default.error('Failed to link external account', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to link external account!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle || !payload.data) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    linkedAccounts: [].concat((0, _toConsumableArray3.default)(newState.linkedAccounts), [payload.data])\n  });\n}\n\n/**\n * Handles PROFILE/UNLINK_EXTERNAL_ACCOUNT_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onUnlinkExternalAccountDone(state, _ref19) {\n  var payload = _ref19.payload,\n      error = _ref19.error;\n\n  var newState = (0, _extends3.default)({}, state, { unlinkingExternalAccount: false });\n\n  if (error) {\n    _logger2.default.error('Failed to unlink external account', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to unlink external account!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    linkedAccounts: _lodash2.default.filter(newState.linkedAccounts, function (el) {\n      return el.providerType !== payload.providerType;\n    })\n  });\n}\n\n/**\n * Handles PROFILE/SAVE_EMAIL_PREFERENCES_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onSaveEmailPreferencesDone(state, _ref20) {\n  var payload = _ref20.payload,\n      error = _ref20.error;\n\n  var newState = (0, _extends3.default)({}, state, { savingEmailPreferences: false });\n\n  if (error) {\n    _logger2.default.error('Failed to save email preferences', payload);\n    (0, _errors.fireErrorMessage)('ERROR: Failed to save email preferences!');\n    return newState;\n  }\n\n  if (newState.profileForHandle !== payload.handle) {\n    return newState;\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    emailPreferences: payload.preferences\n  });\n}\n\n/**\n * Handles PROFILE/UPDATE_PASSWORD_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onUpdatePasswordDone(state, _ref21) {\n  var payload = _ref21.payload,\n      error = _ref21.error;\n\n  var newState = (0, _extends3.default)({}, state, { updatingPassword: false });\n\n  if (error) {\n    _logger2.default.error('Failed to update password', payload);\n    (0, _errors.fireErrorMessage)('The old password is invalid');\n  }\n  return newState;\n}\n\n/**\n * Handles PROFILE/VERIFY_MEMBER_NEW_EMAIL_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onVerifyMemberNewEmailDone(state, _ref22) {\n  var payload = _ref22.payload,\n      error = _ref22.error;\n\n  var newState = (0, _extends3.default)({}, state, { verifyingEmail: false });\n\n  if (error) {\n    _logger2.default.error('Failed to verify member new email', payload);\n    return (0, _extends3.default)({}, newState, {\n      verifyError: true\n    });\n  }\n\n  return (0, _extends3.default)({}, newState, {\n    verifyError: false,\n    emailChangeResult: payload.data\n  });\n}\n\n/**\n * Handles UPDATE_EMAIL_CONFLICT action\n * @param {Object} state\n * @param {Object} action Payload will be a boolean value\n * @return {Object} New state\n */\nfunction onUpdateEmailConflict(state, _ref23) {\n  var payload = _ref23.payload;\n\n  return (0, _extends3.default)({}, state, {\n    isEmailConflict: payload\n  });\n}\n\n/**\n * Creates a new Profile reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Profile reducer.\n */\nfunction create(initialState) {\n  var _handleActions;\n\n  var a = _profile2.default.profile;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.clearProfile, function (state) {\n    return (0, _extends3.default)({}, state, { achievements: null, country: '', info: null, skills: null, stats: null\n    });\n  }), (0, _defineProperty3.default)(_handleActions, a.loadProfile, function (state, action) {\n    return (0, _extends3.default)({}, state, { profileForHandle: action.payload });\n  }), (0, _defineProperty3.default)(_handleActions, a.getAchievementsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getAchievementsDone, onGetAchievementsDone), (0, _defineProperty3.default)(_handleActions, a.getAchievementsV3Done, onGetAchievementsV3Done), (0, _defineProperty3.default)(_handleActions, a.getExternalAccountsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getExternalAccountsDone, onGetExternalAccountsDone), (0, _defineProperty3.default)(_handleActions, a.getExternalLinksInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getExternalLinksDone, onGetExternalLinksDone), (0, _defineProperty3.default)(_handleActions, a.getInfoInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getInfoDone, onGetInfoDone), (0, _defineProperty3.default)(_handleActions, a.getSkillsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getSkillsDone, onGetSkillsDone), (0, _defineProperty3.default)(_handleActions, a.getStatsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getStatsDone, onGetStatsDone), (0, _defineProperty3.default)(_handleActions, a.getLinkedAccountsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getLinkedAccountsDone, onGetLinkedAccountsDone), (0, _defineProperty3.default)(_handleActions, a.uploadPhotoInit, function (state) {\n    return (0, _extends3.default)({}, state, { uploadingPhoto: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.uploadPhotoDone, onUploadPhotoDone), (0, _defineProperty3.default)(_handleActions, a.deletePhotoInit, function (state) {\n    return (0, _extends3.default)({}, state, { deletingPhoto: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.deletePhotoDone, onDeletePhotoDone), (0, _defineProperty3.default)(_handleActions, a.updateProfileInit, function (state) {\n    return (0, _extends3.default)({}, state, { updatingProfile: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.updateProfileDone, onUpdateProfileDone), (0, _defineProperty3.default)(_handleActions, a.addSkillInit, function (state) {\n    return (0, _extends3.default)({}, state, { addingSkill: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.addSkillDone, onAddSkillDone), (0, _defineProperty3.default)(_handleActions, a.hideSkillInit, function (state) {\n    return (0, _extends3.default)({}, state, { hidingSkill: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.hideSkillDone, onHideSkillDone), (0, _defineProperty3.default)(_handleActions, a.addWebLinkInit, function (state) {\n    return (0, _extends3.default)({}, state, { addingWebLink: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.addWebLinkDone, onAddWebLinkDone), (0, _defineProperty3.default)(_handleActions, a.deleteWebLinkInit, function (state) {\n    return (0, _extends3.default)({}, state, { deletingWebLink: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.deleteWebLinkDone, onDeleteWebLinkDone), (0, _defineProperty3.default)(_handleActions, a.linkExternalAccountInit, function (state) {\n    return (0, _extends3.default)({}, state, { linkingExternalAccount: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.linkExternalAccountDone, onLinkExternalAccountDone), (0, _defineProperty3.default)(_handleActions, a.unlinkExternalAccountInit, function (state) {\n    return (0, _extends3.default)({}, state, { unlinkingExternalAccount: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.unlinkExternalAccountDone, onUnlinkExternalAccountDone), (0, _defineProperty3.default)(_handleActions, a.getCredentialInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getCredentialDone, onGetCredentialDone), (0, _defineProperty3.default)(_handleActions, a.getEmailPreferencesInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_handleActions, a.getEmailPreferencesDone, onGetEmailPreferencesDone), (0, _defineProperty3.default)(_handleActions, a.saveEmailPreferencesInit, function (state) {\n    return (0, _extends3.default)({}, state, { savingEmailPreferences: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.saveEmailPreferencesDone, onSaveEmailPreferencesDone), (0, _defineProperty3.default)(_handleActions, a.updatePasswordInit, function (state) {\n    return (0, _extends3.default)({}, state, { updatingPassword: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.updatePasswordDone, onUpdatePasswordDone), (0, _defineProperty3.default)(_handleActions, a.verifyMemberNewEmailInit, function (state) {\n    return (0, _extends3.default)({}, state, { verifyingEmail: true });\n  }), (0, _defineProperty3.default)(_handleActions, a.verifyMemberNewEmailDone, onVerifyMemberNewEmailDone), (0, _defineProperty3.default)(_handleActions, a.updateEmailConflict, onUpdateEmailConflict), _handleActions), _lodash2.default.defaults(initialState, {\n    achievements: null,\n    copilot: false,\n    country: '',\n    info: null,\n    loadingError: false,\n    skills: null,\n    stats: null,\n    verifyError: null,\n    updateProfileSuccess: null\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @returns {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/* Reducer with the default initial state. */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetAchievementsDone, 'onGetAchievementsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetAchievementsV3Done, 'onGetAchievementsV3Done', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetExternalAccountsDone, 'onGetExternalAccountsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetExternalLinksDone, 'onGetExternalLinksDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetInfoDone, 'onGetInfoDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetSkillsDone, 'onGetSkillsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetStatsDone, 'onGetStatsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetLinkedAccountsDone, 'onGetLinkedAccountsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetCredentialDone, 'onGetCredentialDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onGetEmailPreferencesDone, 'onGetEmailPreferencesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUploadPhotoDone, 'onUploadPhotoDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onDeletePhotoDone, 'onDeletePhotoDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUpdateProfileDone, 'onUpdateProfileDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onAddSkillDone, 'onAddSkillDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onHideSkillDone, 'onHideSkillDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onAddWebLinkDone, 'onAddWebLinkDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onDeleteWebLinkDone, 'onDeleteWebLinkDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onLinkExternalAccountDone, 'onLinkExternalAccountDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUnlinkExternalAccountDone, 'onUnlinkExternalAccountDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onSaveEmailPreferencesDone, 'onSaveEmailPreferencesDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUpdatePasswordDone, 'onUpdatePasswordDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onVerifyMemberNewEmailDone, 'onVerifyMemberNewEmailDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(onUpdateEmailConflict, 'onUpdateEmailConflict', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/profile.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/profile.js?");
 
 /***/ }),
 
@@ -796,7 +796,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _reviewOpportunity = __webpack_require__(/*! ../actions/reviewOpportunity */ \"./src/actions/reviewOpportunity.js\");\n\nvar _reviewOpportunity2 = _interopRequireDefault(_reviewOpportunity);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.reviewOpportunity\"\n       * @desc Reducer for state.reviewOpportunity\n       * @todo Document state structure.\n       */\n\n/**\n * Generates a list of unique terms ids required for the open review roles\n * with an agreed field\n *\n * @param {Object} details Review Opportuny details from API\n * @return {Array} List of unique terms\n */\nfunction buildRequiredTermsList(details) {\n  var roles = details.payments.map(function (payment) {\n    return payment.role;\n  });\n\n  var requiredTerms = _lodash2.default.uniqBy(details.challenge.terms\n  // Sometimes roles such as Primary Reviewer have no directly equal\n  // terms entry.  Include the plain Reviewer terms when present as a back-up.\n  .filter(function (term) {\n    return term.role === 'Reviewer' || _lodash2.default.includes(roles, term.role);\n  }).map(function (term) {\n    return _lodash2.default.pick(term, ['termsOfUseId', 'agreed', 'title']);\n  }), function (term) {\n    return term.termsOfUseId;\n  });\n\n  return requiredTerms || [];\n}\n\n/**\n * Handles REVIEW_OPPORTUNITY/GET__DETAILS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetDetailsDone(state, _ref) {\n  var payload = _ref.payload,\n      error = _ref.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, {\n      authError: true,\n      isLoadingDetails: false\n    });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    details: payload,\n    isLoadingDetails: false,\n    requiredTerms: buildRequiredTermsList(payload)\n  });\n}\n\n/**\n * Creates a new Review opportunity reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Review opportunity reducer.\n */\nfunction create(initialState) {\n  var _redux$handleActions;\n\n  var a = _reviewOpportunity2.default.reviewOpportunity;\n  return _topcoderReactUtils.redux.handleActions((_redux$handleActions = {}, (0, _defineProperty3.default)(_redux$handleActions, a.cancelApplicationsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_redux$handleActions, a.cancelApplicationsDone, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_redux$handleActions, a.getDetailsInit, function (state) {\n    return (0, _extends3.default)({}, state, { isLoadingDetails: true });\n  }), (0, _defineProperty3.default)(_redux$handleActions, a.getDetailsDone, onGetDetailsDone), (0, _defineProperty3.default)(_redux$handleActions, a.submitApplicationsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_redux$handleActions, a.submitApplicationsDone, function (state) {\n    return state;\n  }), _redux$handleActions), _lodash2.default.defaults(initialState, {\n    authError: false,\n    details: null,\n    isLoadingDetails: false,\n    requiredTerms: []\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @param {Object} options={} Optional. Options object for initial state.\n * @param {String} [options.auth.tokenV2=''] The V2 auth token\n * @param {String} [options.auth.tokenV3=''] The V3 auth token\n * @param {String} [options.reviewOpportunity.challenge.id=''] The challenge id.\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var challengeId = _lodash2.default.get(options, 'reviewOpportunity.challenge.id');\n\n  if (challengeId) {\n    var tokens = {\n      tokenV2: _lodash2.default.get(options.auth, 'tokenV2'),\n      tokenV3: _lodash2.default.get(options.auth, 'tokenV3')\n    };\n\n    var a = _reviewOpportunity2.default.reviewOpportunity;\n    return _topcoderReactUtils.redux.resolveAction(a.getDetailsDone(challengeId, tokens.tokenV3)).then(function (_ref2) {\n      var error = _ref2.error,\n          payload = _ref2.payload;\n\n      var initialState = {};\n      initialState.details = error ? null : payload;\n      initialState.requiredTerms = error ? [] : buildRequiredTermsList(payload);\n      create(initialState);\n    });\n  }\n\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(buildRequiredTermsList, 'buildRequiredTermsList', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  reactHotLoader.register(onGetDetailsDone, 'onGetDetailsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/reviewOpportunity.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _reviewOpportunity = __webpack_require__(/*! ../actions/reviewOpportunity */ \"./src/actions/reviewOpportunity.js\");\n\nvar _reviewOpportunity2 = _interopRequireDefault(_reviewOpportunity);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.reviewOpportunity\"\n       * @desc Reducer for state.reviewOpportunity\n       * @todo Document state structure.\n       */\n\n/**\n * Generates a list of unique terms ids required for the open review roles\n * with an agreed field\n *\n * @param {Object} details Review Opportuny details from API\n * @return {Array} List of unique terms\n */\nfunction buildRequiredTermsList(details) {\n  var roles = details.payments.map(function (payment) {\n    return payment.role;\n  });\n\n  var requiredTerms = _lodash2.default.uniqBy(details.challenge.terms\n  // Sometimes roles such as Primary Reviewer have no directly equal\n  // terms entry.  Include the plain Reviewer terms when present as a back-up.\n  .filter(function (term) {\n    return term.role === 'Reviewer' || _lodash2.default.includes(roles, term.role);\n  }).map(function (term) {\n    return _lodash2.default.pick(term, ['termsOfUseId', 'agreed', 'title']);\n  }), function (term) {\n    return term.termsOfUseId;\n  });\n\n  return requiredTerms || [];\n}\n\n/**\n * Handles REVIEW_OPPORTUNITY/GET__DETAILS_DONE action.\n * @param {Object} state\n * @param {Object} action Payload will be JSON from api call\n * @return {Object} New state\n */\nfunction onGetDetailsDone(state, _ref) {\n  var payload = _ref.payload,\n      error = _ref.error;\n\n  if (error) {\n    return (0, _extends3.default)({}, state, {\n      authError: true,\n      isLoadingDetails: false\n    });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    details: payload,\n    isLoadingDetails: false,\n    requiredTerms: buildRequiredTermsList(payload)\n  });\n}\n\n/**\n * Creates a new Review opportunity reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Review opportunity reducer.\n */\nfunction create(initialState) {\n  var _redux$handleActions;\n\n  var a = _reviewOpportunity2.default.reviewOpportunity;\n  return _topcoderReactUtils.redux.handleActions((_redux$handleActions = {}, (0, _defineProperty3.default)(_redux$handleActions, a.cancelApplicationsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_redux$handleActions, a.cancelApplicationsDone, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_redux$handleActions, a.getDetailsInit, function (state) {\n    return (0, _extends3.default)({}, state, { isLoadingDetails: true });\n  }), (0, _defineProperty3.default)(_redux$handleActions, a.getDetailsDone, onGetDetailsDone), (0, _defineProperty3.default)(_redux$handleActions, a.submitApplicationsInit, function (state) {\n    return state;\n  }), (0, _defineProperty3.default)(_redux$handleActions, a.submitApplicationsDone, function (state) {\n    return state;\n  }), _redux$handleActions), _lodash2.default.defaults(initialState, {\n    authError: false,\n    details: null,\n    isLoadingDetails: false,\n    requiredTerms: []\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @param {Object} options={} Optional. Options object for initial state.\n * @param {String} [options.auth.tokenV2=''] The V2 auth token\n * @param {String} [options.auth.tokenV3=''] The V3 auth token\n * @param {String} [options.reviewOpportunity.challenge.id=''] The challenge id.\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var challengeId = _lodash2.default.get(options, 'reviewOpportunity.challenge.id');\n\n  if (challengeId) {\n    var tokens = {\n      tokenV2: _lodash2.default.get(options.auth, 'tokenV2'),\n      tokenV3: _lodash2.default.get(options.auth, 'tokenV3')\n    };\n\n    var a = _reviewOpportunity2.default.reviewOpportunity;\n    return _topcoderReactUtils.redux.resolveAction(a.getDetailsDone(challengeId, tokens.tokenV3)).then(function (_ref2) {\n      var error = _ref2.error,\n          payload = _ref2.payload;\n\n      var initialState = {};\n      initialState.details = error ? null : payload;\n      initialState.requiredTerms = error ? [] : buildRequiredTermsList(payload);\n      create(initialState);\n    });\n  }\n\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(buildRequiredTermsList, 'buildRequiredTermsList', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  reactHotLoader.register(onGetDetailsDone, 'onGetDetailsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/reviewOpportunity.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/reviewOpportunity.js?");
 
 /***/ }),
 
@@ -808,7 +808,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _settings = __webpack_require__(/*! ../actions/settings */ \"./src/actions/settings.js\");\n\nvar _settings2 = _interopRequireDefault(_settings);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.settings\"\n       * @desc Reducer for the Redux store segment that holds traits data.\n       */\n\n/**\n * Handles SETTINGS/GET_ALL_USER_TRAITS action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetAllUserTraits(state, _ref) {\n  var error = _ref.error,\n      payload = _ref.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get all user traits', payload);\n    return (0, _extends3.default)({}, state, {\n      userTraits: []\n    });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    userTraits: payload.data\n  });\n}\n\n/**\n * Handles SETTINGS/MODIFY_USER_TRAIT_INIT action.\n * @param {Object} state *\n * @return {Object} New state.\n */\nfunction onModifyUserTraitInit(state) {\n  return (0, _extends3.default)({}, state, {\n    traitRequestCount: state.traitRequestCount + 1\n  });\n}\n\n/**\n * Handles SETTINGS/ADD_USER_TRAIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onAddUserTrait(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to add user trait', payload);\n    (0, _errors.fireErrorMessage)('Failed to add user trait', '');\n    return (0, _extends3.default)({}, state, {\n      traitRequestCount: state.traitRequestCount - 1\n    });\n  }\n  var newData = payload.result[0];\n  return (0, _extends3.default)({}, state, {\n    userTraits: [].concat((0, _toConsumableArray3.default)(state.userTraits), [newData]),\n    traitRequestCount: state.traitRequestCount - 1\n  });\n}\n\n/**\n * Handles SETTINGS/UPDATE_USER_TRAIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onUpdateUserTrait(state, _ref3) {\n  var error = _ref3.error,\n      payload = _ref3.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to update user trait', payload);\n    (0, _errors.fireErrorMessage)('Failed to update user trait', '');\n    return (0, _extends3.default)({}, state, {\n      traitRequestCount: state.traitRequestCount - 1\n    });\n  }\n  var newData = payload.result[0];\n  var newUserTraits = state.userTraits.filter(function (trait) {\n    return trait.traitId !== payload.traitId;\n  });\n  newUserTraits.push(newData);\n\n  return (0, _extends3.default)({}, state, {\n    userTraits: newUserTraits,\n    traitRequestCount: state.traitRequestCount - 1\n  });\n}\n\n/**\n * Handles SETTINGS/DELETE_USER_TRAIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onDeleteUserTrait(state, _ref4) {\n  var error = _ref4.error,\n      payload = _ref4.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to delete user trait', payload);\n    (0, _errors.fireErrorMessage)('Failed to delete user trait', '');\n    return (0, _extends3.default)({}, state, {\n      traitRequestCount: state.traitRequestCount - 1\n    });\n  }\n  var newUserTraits = state.userTraits.filter(function (trait) {\n    return trait.traitId !== payload.traitId;\n  });\n  return (0, _extends3.default)({}, state, {\n    userTraits: newUserTraits,\n    traitRequestCount: state.traitRequestCount - 1\n  });\n}\n\n/**\n * Creates a new user trait reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} userTraits reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    traitRequestCount: 0,\n    userTraits: []\n  };\n\n  var a = _settings2.default.settings;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.getAllUserTraits, onGetAllUserTraits), (0, _defineProperty3.default)(_handleActions, a.modifyUserTraitInit, onModifyUserTraitInit), (0, _defineProperty3.default)(_handleActions, a.addUserTrait, onAddUserTrait), (0, _defineProperty3.default)(_handleActions, a.deleteUserTrait, onDeleteUserTrait), (0, _defineProperty3.default)(_handleActions, a.updateUserTrait, onUpdateUserTrait), _handleActions), initialState);\n}\n\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetAllUserTraits, 'onGetAllUserTraits', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(onModifyUserTraitInit, 'onModifyUserTraitInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(onAddUserTrait, 'onAddUserTrait', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(onUpdateUserTrait, 'onUpdateUserTrait', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(onDeleteUserTrait, 'onDeleteUserTrait', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/settings.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/settings.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _toConsumableArray2 = __webpack_require__(/*! babel-runtime/helpers/toConsumableArray */ \"babel-runtime/helpers/toConsumableArray\");\n\nvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _settings = __webpack_require__(/*! ../actions/settings */ \"./src/actions/settings.js\");\n\nvar _settings2 = _interopRequireDefault(_settings);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.settings\"\n       * @desc Reducer for the Redux store segment that holds traits data.\n       */\n\n/**\n * Handles SETTINGS/GET_ALL_USER_TRAITS action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetAllUserTraits(state, _ref) {\n  var error = _ref.error,\n      payload = _ref.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to get all user traits', payload);\n    return (0, _extends3.default)({}, state, {\n      userTraits: []\n    });\n  }\n\n  return (0, _extends3.default)({}, state, {\n    userTraits: payload.data\n  });\n}\n\n/**\n * Handles SETTINGS/MODIFY_USER_TRAIT_INIT action.\n * @param {Object} state *\n * @return {Object} New state.\n */\nfunction onModifyUserTraitInit(state) {\n  return (0, _extends3.default)({}, state, {\n    traitRequestCount: state.traitRequestCount + 1\n  });\n}\n\n/**\n * Handles SETTINGS/ADD_USER_TRAIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onAddUserTrait(state, _ref2) {\n  var error = _ref2.error,\n      payload = _ref2.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to add user trait', payload);\n    (0, _errors.fireErrorMessage)('Failed to add user trait', '');\n    return (0, _extends3.default)({}, state, {\n      traitRequestCount: state.traitRequestCount - 1\n    });\n  }\n  var newData = payload.result[0];\n  return (0, _extends3.default)({}, state, {\n    userTraits: [].concat((0, _toConsumableArray3.default)(state.userTraits), [newData]),\n    traitRequestCount: state.traitRequestCount - 1\n  });\n}\n\n/**\n * Handles SETTINGS/UPDATE_USER_TRAIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onUpdateUserTrait(state, _ref3) {\n  var error = _ref3.error,\n      payload = _ref3.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to update user trait', payload);\n    (0, _errors.fireErrorMessage)('Failed to update user trait', '');\n    return (0, _extends3.default)({}, state, {\n      traitRequestCount: state.traitRequestCount - 1\n    });\n  }\n  var newData = payload.result[0];\n  var newUserTraits = state.userTraits.filter(function (trait) {\n    return trait.traitId !== payload.traitId;\n  });\n  newUserTraits.push(newData);\n\n  return (0, _extends3.default)({}, state, {\n    userTraits: newUserTraits,\n    traitRequestCount: state.traitRequestCount - 1\n  });\n}\n\n/**\n * Handles SETTINGS/DELETE_USER_TRAIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onDeleteUserTrait(state, _ref4) {\n  var error = _ref4.error,\n      payload = _ref4.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to delete user trait', payload);\n    (0, _errors.fireErrorMessage)('Failed to delete user trait', '');\n    return (0, _extends3.default)({}, state, {\n      traitRequestCount: state.traitRequestCount - 1\n    });\n  }\n  var newUserTraits = state.userTraits.filter(function (trait) {\n    return trait.traitId !== payload.traitId;\n  });\n  return (0, _extends3.default)({}, state, {\n    userTraits: newUserTraits,\n    traitRequestCount: state.traitRequestCount - 1\n  });\n}\n\n/**\n * Creates a new user trait reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} userTraits reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n    traitRequestCount: 0,\n    userTraits: []\n  };\n\n  var a = _settings2.default.settings;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.getAllUserTraits, onGetAllUserTraits), (0, _defineProperty3.default)(_handleActions, a.modifyUserTraitInit, onModifyUserTraitInit), (0, _defineProperty3.default)(_handleActions, a.addUserTrait, onAddUserTrait), (0, _defineProperty3.default)(_handleActions, a.deleteUserTrait, onDeleteUserTrait), (0, _defineProperty3.default)(_handleActions, a.updateUserTrait, onUpdateUserTrait), _handleActions), initialState);\n}\n\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetAllUserTraits, 'onGetAllUserTraits', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(onModifyUserTraitInit, 'onModifyUserTraitInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(onAddUserTrait, 'onAddUserTrait', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(onUpdateUserTrait, 'onUpdateUserTrait', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(onDeleteUserTrait, 'onDeleteUserTrait', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/settings.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/settings.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/settings.js?");
 
 /***/ }),
 
@@ -820,7 +820,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends4 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends5 = _interopRequireDefault(_extends4);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _stats = __webpack_require__(/*! ../actions/stats */ \"./src/actions/stats.js\");\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.stats\"\n       * @desc Reducer for state.stats. That part of Redux state is intended to keep\n       *  user- and group-related statistics to render in the frontend.\n       * @todo Document state segment structure.\n       */\n\n/**\n * Inits the loading of community stats.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetCommunityStatsInit(state, action) {\n  var _action$payload = action.payload,\n      community = _action$payload.community,\n      uuid = _action$payload.uuid;\n\n  var res = state.communities[community];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.loadingUuid = uuid;\n  return (0, _extends5.default)({}, state, {\n    communities: (0, _extends5.default)({}, state.communities, (0, _defineProperty3.default)({}, community, res))\n  });\n}\n\n/**\n * Handles result of the getCommunityStats action.\n * @param {Object} state Previous state.\n * @param {Object} action Action result.\n * @return {Object} New state.\n */\nfunction onGetCommunityStatsDone(state, _ref) {\n  var error = _ref.error,\n      payload = _ref.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to load community stats', payload);\n    (0, _errors.fireErrorMessage)('Failed to load community stats', '');\n    return state;\n  }\n\n  var community = payload.community,\n      stats = payload.stats,\n      uuid = payload.uuid;\n\n  if (_lodash2.default.get(state.communities[community], 'loadingUuid') !== uuid) {\n    return state;\n  }\n  return (0, _extends5.default)({}, state, {\n    communities: (0, _extends5.default)({}, state.communities, (0, _defineProperty3.default)({}, community, {\n      data: stats,\n      timestamp: Date.now()\n    }))\n  });\n}\n\n/**\n * Creates a new Stats reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Stats reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _stats2.default.stats;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.getCommunityStatsInit, onGetCommunityStatsInit), (0, _defineProperty3.default)(_handleActions, a.getCommunityStatsDone, onGetCommunityStatsDone), _handleActions), _lodash2.default.defaults(_lodash2.default.clone(initialState), {\n    communities: {}\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetCommunityStatsInit, 'onGetCommunityStatsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/stats.js');\n  reactHotLoader.register(onGetCommunityStatsDone, 'onGetCommunityStatsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/stats.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/stats.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/stats.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/stats.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/stats.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends4 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends5 = _interopRequireDefault(_extends4);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _reduxActions = __webpack_require__(/*! redux-actions */ \"redux-actions\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _stats = __webpack_require__(/*! ../actions/stats */ \"./src/actions/stats.js\");\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.stats\"\n       * @desc Reducer for state.stats. That part of Redux state is intended to keep\n       *  user- and group-related statistics to render in the frontend.\n       * @todo Document state segment structure.\n       */\n\n/**\n * Inits the loading of community stats.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetCommunityStatsInit(state, action) {\n  var _action$payload = action.payload,\n      community = _action$payload.community,\n      uuid = _action$payload.uuid;\n\n  var res = state.communities[community];\n  res = res ? _lodash2.default.clone(res) : {};\n  res.loadingUuid = uuid;\n  return (0, _extends5.default)({}, state, {\n    communities: (0, _extends5.default)({}, state.communities, (0, _defineProperty3.default)({}, community, res))\n  });\n}\n\n/**\n * Handles result of the getCommunityStats action.\n * @param {Object} state Previous state.\n * @param {Object} action Action result.\n * @return {Object} New state.\n */\nfunction onGetCommunityStatsDone(state, _ref) {\n  var error = _ref.error,\n      payload = _ref.payload;\n\n  if (error) {\n    _logger2.default.error('Failed to load community stats', payload);\n    (0, _errors.fireErrorMessage)('Failed to load community stats', '');\n    return state;\n  }\n\n  var community = payload.community,\n      stats = payload.stats,\n      uuid = payload.uuid;\n\n  if (_lodash2.default.get(state.communities[community], 'loadingUuid') !== uuid) {\n    return state;\n  }\n  return (0, _extends5.default)({}, state, {\n    communities: (0, _extends5.default)({}, state.communities, (0, _defineProperty3.default)({}, community, {\n      data: stats,\n      timestamp: Date.now()\n    }))\n  });\n}\n\n/**\n * Creates a new Stats reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function} Stats reducer.\n */\nfunction create() {\n  var _handleActions;\n\n  var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var a = _stats2.default.stats;\n  return (0, _reduxActions.handleActions)((_handleActions = {}, (0, _defineProperty3.default)(_handleActions, a.getCommunityStatsInit, onGetCommunityStatsInit), (0, _defineProperty3.default)(_handleActions, a.getCommunityStatsDone, onGetCommunityStatsDone), _handleActions), _lodash2.default.defaults(_lodash2.default.clone(initialState), {\n    communities: {}\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(onGetCommunityStatsInit, 'onGetCommunityStatsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/stats.js');\n  reactHotLoader.register(onGetCommunityStatsDone, 'onGetCommunityStatsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/stats.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/stats.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/stats.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/stats.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/stats.js?");
 
 /***/ }),
 
@@ -832,7 +832,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _terms = __webpack_require__(/*! ../actions/terms */ \"./src/actions/terms.js\");\n\nvar _terms2 = _interopRequireDefault(_terms);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.terms\"\n       * @desc Reducer for state.terms.\n       * @todo Document state segment structure.\n       */\n\n\n/**\n * sort terms by agreed status\n * @param  {Array} terms terms to sort\n * @return {Array}       sorted terms\n */\nfunction sortTerms(terms) {\n  return _lodash2.default.sortBy(terms, function (t) {\n    return t.agreed ? 0 : 1;\n  });\n}\n\n/**\n * Handles TERMS/GET_TERMS_DONE action.\n * Note, that it silently discards received terms if the entity of received data\n * mismatches the one stored in loadingTermsForEntity\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetTermsDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get terms!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      terms: [],\n      getTermsFailure: action.error,\n      loadingTermsForEntity: null\n    });\n  }\n\n  if (!_lodash2.default.isEqual(action.payload.entity, state.loadingTermsForEntity)) {\n    return state;\n  }\n\n  return (0, _extends3.default)({}, state, {\n    entity: action.payload.entity,\n    terms: sortTerms(action.payload.terms),\n    getTermsFailure: false,\n    loadingTermsForEntity: null\n  });\n}\n\n/**\n * Handles TERMS/GET_TERMS_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetTermsInit(state, action) {\n  return (0, _extends3.default)({}, state, {\n    getTermsFailure: false,\n    loadingTermsForEntity: action.payload,\n    terms: [],\n    entity: action.payload\n  });\n}\n\n/**\n * Handles TERMS/CHECK_STATUS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onCheckStatusDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Check terms status failed!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      checkingStatus: false,\n      checkStatusError: action.payload,\n      canRegister: false\n    });\n  }\n  var canRegister = _lodash2.default.every(action.payload, 'agreed');\n  var selectedTerm = _lodash2.default.find(action.payload, function (t) {\n    return !t.agreed;\n  });\n  return (0, _extends3.default)({}, state, {\n    checkingStatus: false,\n    checkStatusError: false,\n    canRegister: canRegister,\n    terms: sortTerms(action.payload),\n    selectedTerm: selectedTerm\n  });\n}\n\n/**\n * Handles TERMS/GET_TERM_DETAILS_DONE action.\n * Note, that it silently discards received details if the termId of received\n * mismatches the one stored in loadingDetailsForTermId field\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetTermDetailsDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get term details!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      details: null,\n      getTermDetailsFailure: action.payload,\n      loadingDetailsForTermId: ''\n    });\n  }\n\n  if (_lodash2.default.toString(action.payload.termId) !== state.loadingDetailsForTermId) {\n    return state;\n  }\n\n  return (0, _extends3.default)({}, state, action.payload, {\n    getTermDetailsFailure: false,\n    loadingDetailsForTermId: ''\n  });\n}\n\n/**\n * Handles TERMS/GET_DOCU_SIGN_URL_DONE action.\n * Note, that it silently discards received url if the templateId of received\n * mismatches the one stored in loadingDocuSignUrl field\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetDocuSignUrlDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get docu sign url!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      docuSignUrl: '',\n      getDocuSignUrlFailure: action.payload,\n      loadingDocuSignUrl: ''\n    });\n  }\n\n  if (_lodash2.default.toString(action.payload.templateId) !== state.loadingDocuSignUrl) {\n    return state;\n  }\n  return (0, _extends3.default)({}, state, action.payload, {\n    getDocuSignUrlFailure: false,\n    loadingDocuSignUrl: ''\n  });\n}\n\n/**\n * Handles TERMS/AGREE_TERM_DONE action.\n * Note, that it silently discards received result if the termId of received\n * mismatches the one stored in agreeingTerm field\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onAgreeTermDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to agree term!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      agreeTermFailure: action.payload,\n      agreeingTerm: ''\n    });\n  }\n\n  if (_lodash2.default.toString(action.payload.termId) !== state.agreeingTerm) {\n    return state;\n  }\n  if (action.payload.success) {\n    var terms = _lodash2.default.cloneDeep(state.terms);\n    var term = _lodash2.default.find(terms, ['termsOfUseId', action.payload.termId]);\n    term.agreed = true;\n    var selectedTerm = _lodash2.default.find(terms, function (t) {\n      return !t.agreed;\n    });\n    return (0, _extends3.default)({}, state, {\n      terms: terms,\n      selectedTerm: selectedTerm,\n      agreeTermFailure: false,\n      agreeingTerm: ''\n    });\n  }\n  return (0, _extends3.default)({}, state, {\n    agreeTermFailure: false,\n    agreeingTerm: ''\n  });\n}\n\n/**\n * Creates a new Profile reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function(state, action): state} Profile reducer.\n */\nfunction create(initialState) {\n  var _redux$handleActions;\n\n  return _topcoderReactUtils.redux.handleActions((_redux$handleActions = {}, (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getTermsInit, onGetTermsInit), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getTermsDone, onGetTermsDone), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getTermDetailsInit, function (state, _ref) {\n    var payload = _ref.payload;\n    return (0, _extends3.default)({}, state, {\n      getTermDetailsFailure: false,\n      loadingDetailsForTermId: payload,\n      details: null,\n      termId: payload\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getTermDetailsDone, onGetTermDetailsDone), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getDocuSignUrlInit, function (state, _ref2) {\n    var payload = _ref2.payload;\n    return (0, _extends3.default)({}, state, {\n      getDocuSignUrlFailure: false,\n      loadingDocuSignUrl: payload,\n      docuSignUrl: '',\n      templateId: payload\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getDocuSignUrlDone, onGetDocuSignUrlDone), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.agreeTermInit, function (state, _ref3) {\n    var payload = _ref3.payload;\n    return (0, _extends3.default)({}, state, {\n      agreeTermFailure: false,\n      agreeingTerm: payload\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.agreeTermDone, onAgreeTermDone), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.checkStatusInit, function (state) {\n    return (0, _extends3.default)({}, state, {\n      checkingStatus: true\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.checkStatusDone, onCheckStatusDone), _redux$handleActions), _lodash2.default.defaults(initialState, {\n    terms: [],\n    selectedTerm: null\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @param {Object} options={} Optional. Options object for initial state.\n * @param {String} [options.auth.tokenV2=''] The V2 auth token\n * @param {String} [options.auth.tokenV3=''] The V3 auth token\n * @param {String} [options.terms.entity.type=''] The terms entity type:\n *  - `challenge`\n *  - `community`\n *  - `reviewOpportunity`\n * @param {String} [options.terms.entity.id=''] The terms entity id\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var entityType = _lodash2.default.get(options, 'terms.entity.type');\n  var entityId = _lodash2.default.get(options, 'terms.entity.id');\n\n  if (entityType && entityId) {\n    var entity = options.terms.entity;\n\n    var tokens = {\n      tokenV2: _lodash2.default.get(options.auth, 'tokenV2'),\n      tokenV3: _lodash2.default.get(options.auth, 'tokenV3')\n    };\n    return _topcoderReactUtils.redux.resolveAction(_terms2.default.terms.getTermsDone(entity, tokens)).then(function (termsDoneAction) {\n      // we have to init first, otherwise results will be ignored by onGetTermsDone\n      var state = onGetTermsInit({}, _terms2.default.terms.getTermsInit(entity));\n      state = onGetTermsDone(state, termsDoneAction);\n\n      return create(state);\n    });\n  }\n\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(sortTerms, 'sortTerms', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onGetTermsDone, 'onGetTermsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onGetTermsInit, 'onGetTermsInit', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onCheckStatusDone, 'onCheckStatusDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onGetTermDetailsDone, 'onGetTermDetailsDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onGetDocuSignUrlDone, 'onGetDocuSignUrlDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onAgreeTermDone, 'onAgreeTermDone', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(create, 'create', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(factory, 'factory', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/reducers/terms.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/terms.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.factory = factory;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _terms = __webpack_require__(/*! ../actions/terms */ \"./src/actions/terms.js\");\n\nvar _terms2 = _interopRequireDefault(_terms);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"reducers.terms\"\n       * @desc Reducer for state.terms.\n       * @todo Document state segment structure.\n       */\n\n\n/**\n * sort terms by agreed status\n * @param  {Array} terms terms to sort\n * @return {Array}       sorted terms\n */\nfunction sortTerms(terms) {\n  return _lodash2.default.sortBy(terms, function (t) {\n    return t.agreed ? 0 : 1;\n  });\n}\n\n/**\n * Handles TERMS/GET_TERMS_DONE action.\n * Note, that it silently discards received terms if the entity of received data\n * mismatches the one stored in loadingTermsForEntity\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetTermsDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get terms!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      terms: [],\n      getTermsFailure: action.error,\n      loadingTermsForEntity: null\n    });\n  }\n\n  if (!_lodash2.default.isEqual(action.payload.entity, state.loadingTermsForEntity)) {\n    return state;\n  }\n\n  return (0, _extends3.default)({}, state, {\n    entity: action.payload.entity,\n    terms: sortTerms(action.payload.terms),\n    getTermsFailure: false,\n    loadingTermsForEntity: null\n  });\n}\n\n/**\n * Handles TERMS/GET_TERMS_INIT action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetTermsInit(state, action) {\n  return (0, _extends3.default)({}, state, {\n    getTermsFailure: false,\n    loadingTermsForEntity: action.payload,\n    terms: [],\n    entity: action.payload\n  });\n}\n\n/**\n * Handles TERMS/CHECK_STATUS_DONE action.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onCheckStatusDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Check terms status failed!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      checkingStatus: false,\n      checkStatusError: action.payload,\n      canRegister: false\n    });\n  }\n  var canRegister = _lodash2.default.every(action.payload, 'agreed');\n  var selectedTerm = _lodash2.default.find(action.payload, function (t) {\n    return !t.agreed;\n  });\n  return (0, _extends3.default)({}, state, {\n    checkingStatus: false,\n    checkStatusError: false,\n    canRegister: canRegister,\n    terms: sortTerms(action.payload),\n    selectedTerm: selectedTerm\n  });\n}\n\n/**\n * Handles TERMS/GET_TERM_DETAILS_DONE action.\n * Note, that it silently discards received details if the termId of received\n * mismatches the one stored in loadingDetailsForTermId field\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetTermDetailsDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get term details!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      details: null,\n      getTermDetailsFailure: action.payload,\n      loadingDetailsForTermId: ''\n    });\n  }\n\n  if (_lodash2.default.toString(action.payload.termId) !== state.loadingDetailsForTermId) {\n    return state;\n  }\n\n  return (0, _extends3.default)({}, state, action.payload, {\n    getTermDetailsFailure: false,\n    loadingDetailsForTermId: ''\n  });\n}\n\n/**\n * Handles TERMS/GET_DOCU_SIGN_URL_DONE action.\n * Note, that it silently discards received url if the templateId of received\n * mismatches the one stored in loadingDocuSignUrl field\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onGetDocuSignUrlDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to get docu sign url!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      docuSignUrl: '',\n      getDocuSignUrlFailure: action.payload,\n      loadingDocuSignUrl: ''\n    });\n  }\n\n  if (_lodash2.default.toString(action.payload.templateId) !== state.loadingDocuSignUrl) {\n    return state;\n  }\n  return (0, _extends3.default)({}, state, action.payload, {\n    getDocuSignUrlFailure: false,\n    loadingDocuSignUrl: ''\n  });\n}\n\n/**\n * Handles TERMS/AGREE_TERM_DONE action.\n * Note, that it silently discards received result if the termId of received\n * mismatches the one stored in agreeingTerm field\n * of the state.\n * @param {Object} state\n * @param {Object} action\n * @return {Object} New state.\n */\nfunction onAgreeTermDone(state, action) {\n  if (action.error) {\n    _logger2.default.error('Failed to agree term!', action.payload);\n    return (0, _extends3.default)({}, state, {\n      agreeTermFailure: action.payload,\n      agreeingTerm: ''\n    });\n  }\n\n  if (_lodash2.default.toString(action.payload.termId) !== state.agreeingTerm) {\n    return state;\n  }\n  if (action.payload.success) {\n    var terms = _lodash2.default.cloneDeep(state.terms);\n    var term = _lodash2.default.find(terms, ['termsOfUseId', action.payload.termId]);\n    term.agreed = true;\n    var selectedTerm = _lodash2.default.find(terms, function (t) {\n      return !t.agreed;\n    });\n    return (0, _extends3.default)({}, state, {\n      terms: terms,\n      selectedTerm: selectedTerm,\n      agreeTermFailure: false,\n      agreeingTerm: ''\n    });\n  }\n  return (0, _extends3.default)({}, state, {\n    agreeTermFailure: false,\n    agreeingTerm: ''\n  });\n}\n\n/**\n * Creates a new Profile reducer with the specified initial state.\n * @param {Object} initialState Optional. Initial state.\n * @return {Function(state, action): state} Profile reducer.\n */\nfunction create(initialState) {\n  var _redux$handleActions;\n\n  return _topcoderReactUtils.redux.handleActions((_redux$handleActions = {}, (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getTermsInit, onGetTermsInit), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getTermsDone, onGetTermsDone), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getTermDetailsInit, function (state, _ref) {\n    var payload = _ref.payload;\n    return (0, _extends3.default)({}, state, {\n      getTermDetailsFailure: false,\n      loadingDetailsForTermId: payload,\n      details: null,\n      termId: payload\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getTermDetailsDone, onGetTermDetailsDone), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getDocuSignUrlInit, function (state, _ref2) {\n    var payload = _ref2.payload;\n    return (0, _extends3.default)({}, state, {\n      getDocuSignUrlFailure: false,\n      loadingDocuSignUrl: payload,\n      docuSignUrl: '',\n      templateId: payload\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.getDocuSignUrlDone, onGetDocuSignUrlDone), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.agreeTermInit, function (state, _ref3) {\n    var payload = _ref3.payload;\n    return (0, _extends3.default)({}, state, {\n      agreeTermFailure: false,\n      agreeingTerm: payload\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.agreeTermDone, onAgreeTermDone), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.checkStatusInit, function (state) {\n    return (0, _extends3.default)({}, state, {\n      checkingStatus: true\n    });\n  }), (0, _defineProperty3.default)(_redux$handleActions, _terms2.default.terms.checkStatusDone, onCheckStatusDone), _redux$handleActions), _lodash2.default.defaults(initialState, {\n    terms: [],\n    selectedTerm: null\n  }));\n}\n\n/**\n * Factory which creates a new reducer with its initial state tailored to the\n * given options object, if specified (for server-side rendering). If options\n * object is not specified, it creates just the default reducer. Accepted options are:\n * @param {Object} options={} Optional. Options object for initial state.\n * @param {String} [options.auth.tokenV2=''] The V2 auth token\n * @param {String} [options.auth.tokenV3=''] The V3 auth token\n * @param {String} [options.terms.entity.type=''] The terms entity type:\n *  - `challenge`\n *  - `community`\n *  - `reviewOpportunity`\n * @param {String} [options.terms.entity.id=''] The terms entity id\n * @return {Promise}\n * @resolves {Function(state, action): state} New reducer.\n */\nfunction factory() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  var entityType = _lodash2.default.get(options, 'terms.entity.type');\n  var entityId = _lodash2.default.get(options, 'terms.entity.id');\n\n  if (entityType && entityId) {\n    var entity = options.terms.entity;\n\n    var tokens = {\n      tokenV2: _lodash2.default.get(options.auth, 'tokenV2'),\n      tokenV3: _lodash2.default.get(options.auth, 'tokenV3')\n    };\n    return _topcoderReactUtils.redux.resolveAction(_terms2.default.terms.getTermsDone(entity, tokens)).then(function (termsDoneAction) {\n      // we have to init first, otherwise results will be ignored by onGetTermsDone\n      var state = onGetTermsInit({}, _terms2.default.terms.getTermsInit(entity));\n      state = onGetTermsDone(state, termsDoneAction);\n\n      return create(state);\n    });\n  }\n\n  return _promise2.default.resolve(create());\n}\n\n/**\n * @static\n * @member default\n * @desc Reducer with default initial state.\n */\n\nvar _default = create();\n\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(sortTerms, 'sortTerms', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onGetTermsDone, 'onGetTermsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onGetTermsInit, 'onGetTermsInit', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onCheckStatusDone, 'onCheckStatusDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onGetTermDetailsDone, 'onGetTermDetailsDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onGetDocuSignUrlDone, 'onGetDocuSignUrlDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(onAgreeTermDone, 'onAgreeTermDone', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(create, 'create', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(factory, 'factory', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/reducers/terms.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/reducers/terms.js?");
 
 /***/ }),
 
@@ -910,7 +910,7 @@ eval("module.exports = {\"termsOfUseId\":21193,\"title\":\"Standard Terms for To
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _termsAuth = __webpack_require__(/*! ./data/terms-auth.json */ \"./src/services/__mocks__/data/terms-auth.json\");\n\nvar _termsAuth2 = _interopRequireDefault(_termsAuth);\n\nvar _termsDocuSignDetails = __webpack_require__(/*! ./data/terms-docu-sign-details.json */ \"./src/services/__mocks__/data/terms-docu-sign-details.json\");\n\nvar _termsDocuSignDetails2 = _interopRequireDefault(_termsDocuSignDetails);\n\nvar _termsNoauth = __webpack_require__(/*! ./data/terms-noauth.json */ \"./src/services/__mocks__/data/terms-noauth.json\");\n\nvar _termsNoauth2 = _interopRequireDefault(_termsNoauth);\n\nvar _termsReviewer = __webpack_require__(/*! ./data/terms-reviewer.json */ \"./src/services/__mocks__/data/terms-reviewer.json\");\n\nvar _termsReviewer2 = _interopRequireDefault(_termsReviewer);\n\nvar _termsReviewerDetails = __webpack_require__(/*! ./data/terms-reviewer-details.json */ \"./src/services/__mocks__/data/terms-reviewer-details.json\");\n\nvar _termsReviewerDetails2 = _interopRequireDefault(_termsReviewerDetails);\n\nvar _termsTopcoderDetails = __webpack_require__(/*! ./data/terms-topcoder-details.json */ \"./src/services/__mocks__/data/terms-topcoder-details.json\");\n\nvar _termsTopcoderDetails2 = _interopRequireDefault(_termsTopcoderDetails);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Mock version of Terms service. To be used both for Jest testing, and for\n       * manual testing inside the app (see MOCK_TERMS_SERVICE constant\n       * in the app config).\n       *\n       * NOTE: At the moment this mock does not care much about authorization\n       * (i.e. the presence of auth token), as the real backend api acts a bit\n       * surprising and non-intuitive at the moment, so it is a bit difficult\n       * to imitate it exactly.\n       */\n\nvar reviewTermsAgreed = false;\n\nvar TermsService = function () {\n  /**\n   * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n   */\n  function TermsService(tokenV2) {\n    (0, _classCallCheck3.default)(this, TermsService);\n\n    this.private = {\n      tokenV2: tokenV2\n    };\n  }\n\n  /**\n   * Mock of getChallengeTerms(..) method.\n   * The second argument is optional. If present, it should be an array of\n   * boolean values, and it will override acceptance status of terms read\n   * from the JSON data file.\n   * @param {String} challengeId\n   * @param {Array} agreed Optional.\n   */\n\n\n  (0, _createClass3.default)(TermsService, [{\n    key: 'getChallengeTerms',\n    value: function getChallengeTerms(challengeId, agreed) {\n      var res = _lodash2.default.clone(this.private.tokenV2 ? _termsAuth2.default : _termsNoauth2.default);\n      res.serverInformation.currentTime = Date.now();\n      res.requesterInformation.receivedParams.challengeId = _lodash2.default.toString(challengeId);\n      if (this.private.tokenV2 && _lodash2.default.isArray(agreed)) {\n        for (var i = 0; i < Math.min(agreed.length, res.terms.length); i += 1) {\n          res.terms[i].agreed = agreed[i];\n        }\n      }\n      return _promise2.default.resolve(res);\n    }\n\n    /**\n     * Mock of getCommunityTerms(..) method.\n     *\n     * @param {String} communityId community id\n     * @param {String} tokenV3     auth token V3\n     * @param {Array}  agreed      Optional. If present, it should be an array of\n     *                             boolean values, and it will override acceptance\n     *                             status of terms read from the JSON data file.\n     *\n     * @return {Promise} resolves to the list of mocked terms\n     */\n\n  }, {\n    key: 'getCommunityTerms',\n    value: function getCommunityTerms(challengeId, tokenV3, agreed) {\n      var res = _lodash2.default.clone(this.private.tokenV2 ? _termsAuth2.default : _termsNoauth2.default);\n      res.serverInformation.currentTime = Date.now();\n      if (this.private.tokenV2 && _lodash2.default.isArray(agreed)) {\n        for (var i = 0; i < Math.min(agreed.length, res.terms.length); i += 1) {\n          res.terms[i].agreed = agreed[i];\n          delete res.terms[i].text;\n        }\n      }\n      return _promise2.default.resolve(res);\n    }\n\n    /**\n     * Mock of getReviewOpportunityTerms(..) method.\n     */\n    /* eslint-disable class-methods-use-this */\n\n  }, {\n    key: 'getReviewOpportunityTerms',\n    value: function getReviewOpportunityTerms() {\n      var res = _lodash2.default.clone(_termsReviewer2.default);\n      res.terms[0].agreed = reviewTermsAgreed;\n      res.terms[1].agreed = reviewTermsAgreed;\n      return _promise2.default.resolve(res);\n    }\n    /* eslint-enable class-methods-use-this */\n\n    /**\n     * Mock of getTermDetails(..) method.\n     * In the case of Topcoder challenge terms there is \"agreed\" field in the\n     * response. If the second argument is passed into this method, it will\n     * override the value of this field from JSON file with mock data.\n     * @param {Number} termId\n     * @param {Boolean} agreed Optional.\n     */\n\n  }, {\n    key: 'getTermDetails',\n    value: function getTermDetails(termId, agreed) {\n      _lodash2.default.noop(this);\n      var res = void 0;\n      switch (termId) {\n        case 20704:\n          // eslint-disable-next-line\n          agreed = reviewTermsAgreed;\n          res = _lodash2.default.clone(_termsReviewerDetails2.default);\n          break;\n        case 21153:\n          // eslint-disable-next-line\n          if (reviewTermsAgreed) agreed = reviewTermsAgreed;\n          res = _lodash2.default.clone(_termsDocuSignDetails2.default);\n          break;\n        case 21193:\n        case 21194:\n          res = _lodash2.default.clone(_termsTopcoderDetails2.default);\n          break;\n        default:\n          throw new Error('Unknown termId \\'' + termId + '\\'!');\n      }\n      if (!_lodash2.default.isUndefined(agreed)) res.agreed = agreed;\n      res.serverInformation.currentTime = Date.now();\n      res.termsOfUseId = termId;\n      res.requesterInformation.receivedParams.termsOfUseId = _lodash2.default.toString(termId);\n      return _promise2.default.resolve(res);\n    }\n  }, {\n    key: 'getDocuSignUrl',\n    value: function getDocuSignUrl(templateId, returnUrl) {\n      _lodash2.default.noop(this);\n\n      /* TODO: It has not been tracked explicitely, what is the response of\n       * the real api here. It sure contains \"recipientViewUrl\", and this is\n       * the only thing we need for our purposes now. However, it might also\n       * have another useful datafields. This should be explored. */\n      return _promise2.default.resolve({\n        recipientViewUrl: '/community-app-assets/api/mock/docu-sign?returnUrl=' + returnUrl\n      });\n    }\n  }, {\n    key: 'agreeTerm',\n    value: function agreeTerm(termId) {\n      _lodash2.default.noop(termId, this);\n\n      if (termId === 20704) {\n        reviewTermsAgreed = true;\n      }\n\n      /* TODO: It has not been tracked explicitely, what is the response of\n       * the real api here. It sure contains \"success\" field, and this is\n       * the only thing we need for our purposes now. However, it might also\n       * have another useful datafields. This should be explored. */\n      return _promise2.default.resolve({ success: true });\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return TermsService;\n}();\n\n/**\n * Returns a new or existing terms service.\n * @param  {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {Object} Terms service object\n */\n\n\nvar lastInstance = null;\nfunction getService(tokenV2) {\n  /* eslint-disable no-console */\n  console.error('WARNING:\\n    Mock version of DocuSign service is used! Should you see this message in\\n    production, contact support as soon as possible!');\n  /* eslint-enable no-console */\n  if (!lastInstance || tokenV2 && lastInstance.private.tokenV2 !== tokenV2) {\n    lastInstance = new TermsService(tokenV2);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(reviewTermsAgreed, 'reviewTermsAgreed', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/__mocks__/terms.js');\n  reactHotLoader.register(TermsService, 'TermsService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/__mocks__/terms.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/__mocks__/terms.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/__mocks__/terms.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/__mocks__/terms.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/__mocks__/terms.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _termsAuth = __webpack_require__(/*! ./data/terms-auth.json */ \"./src/services/__mocks__/data/terms-auth.json\");\n\nvar _termsAuth2 = _interopRequireDefault(_termsAuth);\n\nvar _termsDocuSignDetails = __webpack_require__(/*! ./data/terms-docu-sign-details.json */ \"./src/services/__mocks__/data/terms-docu-sign-details.json\");\n\nvar _termsDocuSignDetails2 = _interopRequireDefault(_termsDocuSignDetails);\n\nvar _termsNoauth = __webpack_require__(/*! ./data/terms-noauth.json */ \"./src/services/__mocks__/data/terms-noauth.json\");\n\nvar _termsNoauth2 = _interopRequireDefault(_termsNoauth);\n\nvar _termsReviewer = __webpack_require__(/*! ./data/terms-reviewer.json */ \"./src/services/__mocks__/data/terms-reviewer.json\");\n\nvar _termsReviewer2 = _interopRequireDefault(_termsReviewer);\n\nvar _termsReviewerDetails = __webpack_require__(/*! ./data/terms-reviewer-details.json */ \"./src/services/__mocks__/data/terms-reviewer-details.json\");\n\nvar _termsReviewerDetails2 = _interopRequireDefault(_termsReviewerDetails);\n\nvar _termsTopcoderDetails = __webpack_require__(/*! ./data/terms-topcoder-details.json */ \"./src/services/__mocks__/data/terms-topcoder-details.json\");\n\nvar _termsTopcoderDetails2 = _interopRequireDefault(_termsTopcoderDetails);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Mock version of Terms service. To be used both for Jest testing, and for\n       * manual testing inside the app (see MOCK_TERMS_SERVICE constant\n       * in the app config).\n       *\n       * NOTE: At the moment this mock does not care much about authorization\n       * (i.e. the presence of auth token), as the real backend api acts a bit\n       * surprising and non-intuitive at the moment, so it is a bit difficult\n       * to imitate it exactly.\n       */\n\nvar reviewTermsAgreed = false;\n\nvar TermsService = function () {\n  /**\n   * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n   */\n  function TermsService(tokenV2) {\n    (0, _classCallCheck3.default)(this, TermsService);\n\n    this.private = {\n      tokenV2: tokenV2\n    };\n  }\n\n  /**\n   * Mock of getChallengeTerms(..) method.\n   * The second argument is optional. If present, it should be an array of\n   * boolean values, and it will override acceptance status of terms read\n   * from the JSON data file.\n   * @param {String} challengeId\n   * @param {Array} agreed Optional.\n   */\n\n\n  (0, _createClass3.default)(TermsService, [{\n    key: 'getChallengeTerms',\n    value: function getChallengeTerms(challengeId, agreed) {\n      var res = _lodash2.default.clone(this.private.tokenV2 ? _termsAuth2.default : _termsNoauth2.default);\n      res.serverInformation.currentTime = Date.now();\n      res.requesterInformation.receivedParams.challengeId = _lodash2.default.toString(challengeId);\n      if (this.private.tokenV2 && _lodash2.default.isArray(agreed)) {\n        for (var i = 0; i < Math.min(agreed.length, res.terms.length); i += 1) {\n          res.terms[i].agreed = agreed[i];\n        }\n      }\n      return _promise2.default.resolve(res);\n    }\n\n    /**\n     * Mock of getCommunityTerms(..) method.\n     *\n     * @param {String} communityId community id\n     * @param {String} tokenV3     auth token V3\n     * @param {Array}  agreed      Optional. If present, it should be an array of\n     *                             boolean values, and it will override acceptance\n     *                             status of terms read from the JSON data file.\n     *\n     * @return {Promise} resolves to the list of mocked terms\n     */\n\n  }, {\n    key: 'getCommunityTerms',\n    value: function getCommunityTerms(challengeId, tokenV3, agreed) {\n      var res = _lodash2.default.clone(this.private.tokenV2 ? _termsAuth2.default : _termsNoauth2.default);\n      res.serverInformation.currentTime = Date.now();\n      if (this.private.tokenV2 && _lodash2.default.isArray(agreed)) {\n        for (var i = 0; i < Math.min(agreed.length, res.terms.length); i += 1) {\n          res.terms[i].agreed = agreed[i];\n          delete res.terms[i].text;\n        }\n      }\n      return _promise2.default.resolve(res);\n    }\n\n    /**\n     * Mock of getReviewOpportunityTerms(..) method.\n     */\n    /* eslint-disable class-methods-use-this */\n\n  }, {\n    key: 'getReviewOpportunityTerms',\n    value: function getReviewOpportunityTerms() {\n      var res = _lodash2.default.clone(_termsReviewer2.default);\n      res.terms[0].agreed = reviewTermsAgreed;\n      res.terms[1].agreed = reviewTermsAgreed;\n      return _promise2.default.resolve(res);\n    }\n    /* eslint-enable class-methods-use-this */\n\n    /**\n     * Mock of getTermDetails(..) method.\n     * In the case of Topcoder challenge terms there is \"agreed\" field in the\n     * response. If the second argument is passed into this method, it will\n     * override the value of this field from JSON file with mock data.\n     * @param {Number} termId\n     * @param {Boolean} agreed Optional.\n     */\n\n  }, {\n    key: 'getTermDetails',\n    value: function getTermDetails(termId, agreed) {\n      _lodash2.default.noop(this);\n      var res = void 0;\n      switch (termId) {\n        case 20704:\n          // eslint-disable-next-line\n          agreed = reviewTermsAgreed;\n          res = _lodash2.default.clone(_termsReviewerDetails2.default);\n          break;\n        case 21153:\n          // eslint-disable-next-line\n          if (reviewTermsAgreed) agreed = reviewTermsAgreed;\n          res = _lodash2.default.clone(_termsDocuSignDetails2.default);\n          break;\n        case 21193:\n        case 21194:\n          res = _lodash2.default.clone(_termsTopcoderDetails2.default);\n          break;\n        default:\n          throw new Error('Unknown termId \\'' + termId + '\\'!');\n      }\n      if (!_lodash2.default.isUndefined(agreed)) res.agreed = agreed;\n      res.serverInformation.currentTime = Date.now();\n      res.termsOfUseId = termId;\n      res.requesterInformation.receivedParams.termsOfUseId = _lodash2.default.toString(termId);\n      return _promise2.default.resolve(res);\n    }\n  }, {\n    key: 'getDocuSignUrl',\n    value: function getDocuSignUrl(templateId, returnUrl) {\n      _lodash2.default.noop(this);\n\n      /* TODO: It has not been tracked explicitely, what is the response of\n       * the real api here. It sure contains \"recipientViewUrl\", and this is\n       * the only thing we need for our purposes now. However, it might also\n       * have another useful datafields. This should be explored. */\n      return _promise2.default.resolve({\n        recipientViewUrl: '/community-app-assets/api/mock/docu-sign?returnUrl=' + returnUrl\n      });\n    }\n  }, {\n    key: 'agreeTerm',\n    value: function agreeTerm(termId) {\n      _lodash2.default.noop(termId, this);\n\n      if (termId === 20704) {\n        reviewTermsAgreed = true;\n      }\n\n      /* TODO: It has not been tracked explicitely, what is the response of\n       * the real api here. It sure contains \"success\" field, and this is\n       * the only thing we need for our purposes now. However, it might also\n       * have another useful datafields. This should be explored. */\n      return _promise2.default.resolve({ success: true });\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return TermsService;\n}();\n\n/**\n * Returns a new or existing terms service.\n * @param  {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {Object} Terms service object\n */\n\n\nvar lastInstance = null;\nfunction getService(tokenV2) {\n  /* eslint-disable no-console */\n  console.error('WARNING:\\n    Mock version of DocuSign service is used! Should you see this message in\\n    production, contact support as soon as possible!');\n  /* eslint-enable no-console */\n  if (!lastInstance || tokenV2 && lastInstance.private.tokenV2 !== tokenV2) {\n    lastInstance = new TermsService(tokenV2);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(reviewTermsAgreed, 'reviewTermsAgreed', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/__mocks__/terms.js');\n  reactHotLoader.register(TermsService, 'TermsService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/__mocks__/terms.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/__mocks__/terms.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/__mocks__/terms.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/__mocks__/terms.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/__mocks__/terms.js?");
 
 /***/ }),
 
@@ -922,7 +922,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getTcM2mToken = exports.getApiV4 = exports.getApiV3 = exports.getApiV2 = undefined;\n\nvar _keys = __webpack_require__(/*! babel-runtime/core-js/object/keys */ \"babel-runtime/core-js/object/keys\");\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\n/**\n * Gets a valid TC M2M token, either requesting one from TC Auth0 API, or\n * serving one from internal cache.\n *\n * @return {Promise} Resolves to a token, valid at least next\n *  getTcM2mToken.MIN_LIFETIME milliseconds.\n *\n * @throw if called outside of the server.s\n */\nvar getTcM2mToken = exports.getTcM2mToken = function () {\n  var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {\n    var now, cached, TC_M2M, res;\n    return _regenerator2.default.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            if (_topcoderReactUtils.isomorphy.isServerSide()) {\n              _context2.next = 2;\n              break;\n            }\n\n            throw new Error('getTcM2mToken() called outside the server');\n\n          case 2:\n            now = Date.now();\n            cached = getTcM2mToken.cached;\n            TC_M2M = _topcoderReactUtils.config.SECRET.TC_M2M;\n\n            if (!(!cached || cached.expires < now + getTcM2mToken.MIN_LIFETIME)) {\n              _context2.next = 13;\n              break;\n            }\n\n            _context2.next = 8;\n            return (0, _isomorphicFetch2.default)('https://' + _topcoderReactUtils.config.AUTH0.DOMAIN + '/oauth/token', {\n              headers: { 'Content-Type': 'application/json' },\n              body: (0, _stringify2.default)({\n                client_id: TC_M2M.CLIENT_ID,\n                client_secret: TC_M2M.CLIENT_SECRET,\n                audience: TC_M2M.AUDIENCE,\n                grant_type: TC_M2M.GRANT_TYPE\n              }),\n              method: 'POST'\n            });\n\n          case 8:\n            res = _context2.sent;\n            _context2.next = 11;\n            return res.json();\n\n          case 11:\n            res = _context2.sent;\n\n            getTcM2mToken.cached = {\n              expires: now + 1000 * res.expires_in, // [ms]\n              token: res.access_token\n            };\n\n          case 13:\n            return _context2.abrupt('return', getTcM2mToken.cached.token);\n\n          case 14:\n          case 'end':\n            return _context2.stop();\n        }\n      }\n    }, _callee2, this);\n  }));\n\n  return function getTcM2mToken() {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\nexports.getApi = getApi;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _isomorphicFetch = __webpack_require__(/*! isomorphic-fetch */ \"isomorphic-fetch\");\n\nvar _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _time = __webpack_require__(/*! ../utils/time */ \"./src/utils/time.js\");\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.api\"\n       * @desc This module provides a service for conventient access to Topcoder APIs.\n       */\n\n/* The minimal delay [ms] between API calls. To avoid problems with the requests\n * rate limits configured in Topcoder APIs, we throttle requests rate at the\n * client side, and at server-side, in dev mode (which is meant to be used for\n * local development. */\nvar MIN_API_CALL_DELAY = _topcoderReactUtils.isomorphy.isDevBuild() ? 1000 : 200;\n\nvar API_THROTTLING = true;\n\nvar lastApiCallTimestamp = Date.now();\n\n/**\n * @static\n * @member default\n * @desc The default export from the module is\n *  {@link module:services.api~Api} class.\n */\n\n/**\n * API service object. It is reused for both Topcoder API v2 and v3,\n * as in these cases we are fine with the same interface, and the only\n * thing we need to be different is the base URL and auth token to use.\n */\n\nvar Api = function () {\n  /**\n   * Creates a new Api object.\n   * @param {String} base Base URL of the API.\n   * @param {String} token Optional. Authorization token.\n   */\n  function Api(base, token) {\n    (0, _classCallCheck3.default)(this, Api);\n\n    this.private = {\n      base: base,\n      token: token\n    };\n  }\n\n  /**\n   * Sends HTTP request to the specified API endpoint. This method is just\n   * a convenient wrapper around isomorphic fetch(..):\n   *\n   *  - If API service has auth token, Authorization header is automatically\n   *    added to the request;\n   *\n   *  - If no Content-Type header set in options, it is automatically set to\n   *    \"application/json\". In case you want to avoid it, pass null into\n   *    Content-Type header option.\n   *\n   * For additional details see https://github.github.io/fetch/\n   * @param {String} enpoint Should start with slash, like /endpoint.\n   * @param {Object} options Optional. Fetch options.\n   * @return {Promise} It resolves to the HTTP response object. To get the\n   *  actual data you probably want to call .json() method of that object.\n   *  Mind that this promise rejects only on network errors. In case of\n   *  HTTP errors (404, etc.) the promise will be resolved successfully,\n   *  and you should check .status or .ok fields of the response object\n   *  to find out the response status.\n   */\n\n\n  (0, _createClass3.default)(Api, [{\n    key: 'fetch',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(endpoint) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        var _private, base, token, headers, now;\n\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _private = this.private, base = _private.base, token = _private.token;\n                headers = options.headers ? _lodash2.default.clone(options.headers) : {};\n\n                if (token) headers.Authorization = 'Bearer ' + token;\n\n                _context.t0 = headers['Content-Type'];\n                _context.next = _context.t0 === null ? 6 : _context.t0 === undefined ? 8 : 10;\n                break;\n\n              case 6:\n                delete headers['Content-Type'];\n                return _context.abrupt('break', 10);\n\n              case 8:\n                headers['Content-Type'] = 'application/json';\n                return _context.abrupt('break', 10);\n\n              case 10:\n                if (!(API_THROTTLING && (_topcoderReactUtils.isomorphy.isClientSide() || _topcoderReactUtils.isomorphy.isDevBuild()))) {\n                  _context.next = 19;\n                  break;\n                }\n\n                now = Date.now();\n\n                lastApiCallTimestamp += MIN_API_CALL_DELAY;\n\n                if (!(lastApiCallTimestamp > now)) {\n                  _context.next = 18;\n                  break;\n                }\n\n                _context.next = 16;\n                return (0, _time.delay)(lastApiCallTimestamp - now);\n\n              case 16:\n                _context.next = 19;\n                break;\n\n              case 18:\n                lastApiCallTimestamp = now;\n\n              case 19:\n                return _context.abrupt('return', (0, _isomorphicFetch2.default)('' + base + endpoint, (0, _extends3.default)({}, options, {\n                  headers: headers\n                })).catch(function (e) {\n                  (0, _errors.setErrorIcon)(_errors.ERROR_ICON_TYPES.NETWORK, '' + base + endpoint, e.message);\n                  throw e;\n                }));\n\n              case 20:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function fetch(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return fetch;\n    }()\n\n    /**\n     * Sends DELETE request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {Blob|BufferSource|FormData|String} body\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'delete',\n    value: function _delete(endpoint, body) {\n      return this.fetch(endpoint, {\n        body: body,\n        method: 'DELETE'\n      });\n    }\n\n    /**\n     * Sends GET request to the specified endpoint.\n     * @param {String} endpoint\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'get',\n    value: function get(endpoint) {\n      return this.fetch(endpoint);\n    }\n\n    /**\n     * Sends POST request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {Blob|BufferSource|FormData|String} body\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'post',\n    value: function post(endpoint, body) {\n      return this.fetch(endpoint, {\n        body: body,\n        method: 'POST'\n      });\n    }\n\n    /**\n     * Sends POST request to the specified endpoint, with JSON payload.\n     * @param {String} endpoint\n     * @param {JSON} json\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'postJson',\n    value: function postJson(endpoint, json) {\n      return this.post(endpoint, (0, _stringify2.default)(json));\n    }\n\n    /**\n     * Sends PUT request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {Blob|BufferSource|FormData|String} body\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'put',\n    value: function put(endpoint, body) {\n      return this.fetch(endpoint, {\n        body: body,\n        method: 'PUT'\n      });\n    }\n\n    /**\n     * Sends PUT request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {JSON} json\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'putJson',\n    value: function putJson(endpoint, json) {\n      return this.put(endpoint, (0, _stringify2.default)(json));\n    }\n\n    /**\n     * Sends PATCH request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {Blob|BufferSource|FormData|String} body\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'patch',\n    value: function patch(endpoint, body) {\n      return this.fetch(endpoint, {\n        body: body,\n        method: 'PATCH'\n      });\n    }\n\n    /**\n     * Sends PATCH request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {JSON} json\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'patchJson',\n    value: function patchJson(endpoint, json) {\n      return this.patch(endpoint, (0, _stringify2.default)(json));\n    }\n\n    /**\n     * Upload with progress\n     * @param {String} endpoint\n     * @param {Object} body and headers\n     * @param {Function} callback handler for update progress only works for client side for now\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'upload',\n    value: function upload(endpoint, options, onProgress) {\n      var _private2 = this.private,\n          base = _private2.base,\n          token = _private2.token;\n\n      var headers = options.headers ? _lodash2.default.clone(options.headers) : {};\n      if (token) headers.Authorization = 'Bearer ' + token;\n      if (_topcoderReactUtils.isomorphy.isClientSide()) {\n        return new _promise2.default(function (res, rej) {\n          var xhr = new XMLHttpRequest(); //eslint-disable-line\n          xhr.open(options.method, '' + base + endpoint);\n          (0, _keys2.default)(headers).forEach(function (key) {\n            if (headers[key] != null) {\n              xhr.setRequestHeader(key, headers[key]);\n            }\n          });\n          xhr.onload = function (e) {\n            return res(e.target.responseText);\n          };\n          xhr.onerror = rej;\n          if (xhr.upload && onProgress) {\n            xhr.upload.onprogress = function (evt) {\n              if (evt.lengthComputable) onProgress(evt.loaded / evt.total);\n            };\n          }\n          xhr.send(options.body);\n        });\n      }\n      return this.fetch(endpoint, options);\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return Api;\n}();\n\nvar _default = Api;\nexports.default = _default;\n\n/*\n * Topcoder API\n */\n\nvar lastApiInstances = {};\n\n/**\n * Returns a new or existing Api object for Topcoder API.\n * @param {String} version The API version.\n * @param {String} token Optional. Auth token for Topcoder API.\n * @return {Api} API service object.\n */\nfunction getApi(version, token) {\n  if (!version || !_topcoderReactUtils.config.API[version]) {\n    throw new Error(version + ' is not a valid API version');\n  }\n  if (!lastApiInstances[version] || lastApiInstances[version].private.token !== token) {\n    lastApiInstances[version] = new Api(_topcoderReactUtils.config.API[version], token);\n  }\n  return lastApiInstances[version];\n}\n\n/**\n * Keep the old API factories for backwards compatibility\n * DO NOT USE THEM FOR NEW IMPLEMENTATIONS.\n * USE THE getApi(version, token) FACTORY.\n */\nvar getApiV2 = exports.getApiV2 = function getApiV2(token) {\n  return getApi('V2', token);\n};\nvar getApiV3 = exports.getApiV3 = function getApiV3(token) {\n  return getApi('V3', token);\n};\nvar getApiV4 = exports.getApiV4 = function getApiV4(token) {\n  return getApi('V4', token);\n};\n\ngetTcM2mToken.MIN_LIFETIME = 30 * 1000; // [ms]\n\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(MIN_API_CALL_DELAY, 'MIN_API_CALL_DELAY', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(API_THROTTLING, 'API_THROTTLING', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(lastApiCallTimestamp, 'lastApiCallTimestamp', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(Api, 'Api', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(lastApiInstances, 'lastApiInstances', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getApi, 'getApi', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getApiV2, 'getApiV2', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getApiV3, 'getApiV3', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getApiV4, 'getApiV4', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getTcM2mToken, 'getTcM2mToken', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/api.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/api.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getTcM2mToken = exports.getApiV4 = exports.getApiV3 = exports.getApiV2 = undefined;\n\nvar _keys = __webpack_require__(/*! babel-runtime/core-js/object/keys */ \"babel-runtime/core-js/object/keys\");\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\n/**\n * Gets a valid TC M2M token, either requesting one from TC Auth0 API, or\n * serving one from internal cache.\n *\n * @return {Promise} Resolves to a token, valid at least next\n *  getTcM2mToken.MIN_LIFETIME milliseconds.\n *\n * @throw if called outside of the server.s\n */\nvar getTcM2mToken = exports.getTcM2mToken = function () {\n  var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {\n    var now, cached, TC_M2M, res;\n    return _regenerator2.default.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            if (_topcoderReactUtils.isomorphy.isServerSide()) {\n              _context2.next = 2;\n              break;\n            }\n\n            throw new Error('getTcM2mToken() called outside the server');\n\n          case 2:\n            now = Date.now();\n            cached = getTcM2mToken.cached;\n            TC_M2M = _topcoderReactUtils.config.SECRET.TC_M2M;\n\n            if (!(!cached || cached.expires < now + getTcM2mToken.MIN_LIFETIME)) {\n              _context2.next = 13;\n              break;\n            }\n\n            _context2.next = 8;\n            return (0, _isomorphicFetch2.default)('https://' + _topcoderReactUtils.config.AUTH0.DOMAIN + '/oauth/token', {\n              headers: { 'Content-Type': 'application/json' },\n              body: (0, _stringify2.default)({\n                client_id: TC_M2M.CLIENT_ID,\n                client_secret: TC_M2M.CLIENT_SECRET,\n                audience: TC_M2M.AUDIENCE,\n                grant_type: TC_M2M.GRANT_TYPE\n              }),\n              method: 'POST'\n            });\n\n          case 8:\n            res = _context2.sent;\n            _context2.next = 11;\n            return res.json();\n\n          case 11:\n            res = _context2.sent;\n\n            getTcM2mToken.cached = {\n              expires: now + 1000 * res.expires_in, // [ms]\n              token: res.access_token\n            };\n\n          case 13:\n            return _context2.abrupt('return', getTcM2mToken.cached.token);\n\n          case 14:\n          case 'end':\n            return _context2.stop();\n        }\n      }\n    }, _callee2, this);\n  }));\n\n  return function getTcM2mToken() {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\nexports.getApi = getApi;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _isomorphicFetch = __webpack_require__(/*! isomorphic-fetch */ \"isomorphic-fetch\");\n\nvar _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _time = __webpack_require__(/*! ../utils/time */ \"./src/utils/time.js\");\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.api\"\n       * @desc This module provides a service for conventient access to Topcoder APIs.\n       */\n\n/* The minimal delay [ms] between API calls. To avoid problems with the requests\n * rate limits configured in Topcoder APIs, we throttle requests rate at the\n * client side, and at server-side, in dev mode (which is meant to be used for\n * local development. */\nvar MIN_API_CALL_DELAY = _topcoderReactUtils.isomorphy.isDevBuild() ? 1000 : 200;\n\nvar API_THROTTLING = true;\n\nvar lastApiCallTimestamp = Date.now();\n\n/**\n * @static\n * @member default\n * @desc The default export from the module is\n *  {@link module:services.api~Api} class.\n */\n\n/**\n * API service object. It is reused for both Topcoder API v2 and v3,\n * as in these cases we are fine with the same interface, and the only\n * thing we need to be different is the base URL and auth token to use.\n */\n\nvar Api = function () {\n  /**\n   * Creates a new Api object.\n   * @param {String} base Base URL of the API.\n   * @param {String} token Optional. Authorization token.\n   */\n  function Api(base, token) {\n    (0, _classCallCheck3.default)(this, Api);\n\n    this.private = {\n      base: base,\n      token: token\n    };\n  }\n\n  /**\n   * Sends HTTP request to the specified API endpoint. This method is just\n   * a convenient wrapper around isomorphic fetch(..):\n   *\n   *  - If API service has auth token, Authorization header is automatically\n   *    added to the request;\n   *\n   *  - If no Content-Type header set in options, it is automatically set to\n   *    \"application/json\". In case you want to avoid it, pass null into\n   *    Content-Type header option.\n   *\n   * For additional details see https://github.github.io/fetch/\n   * @param {String} enpoint Should start with slash, like /endpoint.\n   * @param {Object} options Optional. Fetch options.\n   * @return {Promise} It resolves to the HTTP response object. To get the\n   *  actual data you probably want to call .json() method of that object.\n   *  Mind that this promise rejects only on network errors. In case of\n   *  HTTP errors (404, etc.) the promise will be resolved successfully,\n   *  and you should check .status or .ok fields of the response object\n   *  to find out the response status.\n   */\n\n\n  (0, _createClass3.default)(Api, [{\n    key: 'fetch',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(endpoint) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        var _private, base, token, headers, now;\n\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _private = this.private, base = _private.base, token = _private.token;\n                headers = options.headers ? _lodash2.default.clone(options.headers) : {};\n\n                if (token) headers.Authorization = 'Bearer ' + token;\n\n                _context.t0 = headers['Content-Type'];\n                _context.next = _context.t0 === null ? 6 : _context.t0 === undefined ? 8 : 10;\n                break;\n\n              case 6:\n                delete headers['Content-Type'];\n                return _context.abrupt('break', 10);\n\n              case 8:\n                headers['Content-Type'] = 'application/json';\n                return _context.abrupt('break', 10);\n\n              case 10:\n                if (!(API_THROTTLING && (_topcoderReactUtils.isomorphy.isClientSide() || _topcoderReactUtils.isomorphy.isDevBuild()))) {\n                  _context.next = 19;\n                  break;\n                }\n\n                now = Date.now();\n\n                lastApiCallTimestamp += MIN_API_CALL_DELAY;\n\n                if (!(lastApiCallTimestamp > now)) {\n                  _context.next = 18;\n                  break;\n                }\n\n                _context.next = 16;\n                return (0, _time.delay)(lastApiCallTimestamp - now);\n\n              case 16:\n                _context.next = 19;\n                break;\n\n              case 18:\n                lastApiCallTimestamp = now;\n\n              case 19:\n                return _context.abrupt('return', (0, _isomorphicFetch2.default)('' + base + endpoint, (0, _extends3.default)({}, options, {\n                  headers: headers\n                })).catch(function (e) {\n                  (0, _errors.setErrorIcon)(_errors.ERROR_ICON_TYPES.NETWORK, '' + base + endpoint, e.message);\n                  throw e;\n                }));\n\n              case 20:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function fetch(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return fetch;\n    }()\n\n    /**\n     * Sends DELETE request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {Blob|BufferSource|FormData|String} body\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'delete',\n    value: function _delete(endpoint, body) {\n      return this.fetch(endpoint, {\n        body: body,\n        method: 'DELETE'\n      });\n    }\n\n    /**\n     * Sends GET request to the specified endpoint.\n     * @param {String} endpoint\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'get',\n    value: function get(endpoint) {\n      return this.fetch(endpoint);\n    }\n\n    /**\n     * Sends POST request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {Blob|BufferSource|FormData|String} body\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'post',\n    value: function post(endpoint, body) {\n      return this.fetch(endpoint, {\n        body: body,\n        method: 'POST'\n      });\n    }\n\n    /**\n     * Sends POST request to the specified endpoint, with JSON payload.\n     * @param {String} endpoint\n     * @param {JSON} json\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'postJson',\n    value: function postJson(endpoint, json) {\n      return this.post(endpoint, (0, _stringify2.default)(json));\n    }\n\n    /**\n     * Sends PUT request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {Blob|BufferSource|FormData|String} body\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'put',\n    value: function put(endpoint, body) {\n      return this.fetch(endpoint, {\n        body: body,\n        method: 'PUT'\n      });\n    }\n\n    /**\n     * Sends PUT request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {JSON} json\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'putJson',\n    value: function putJson(endpoint, json) {\n      return this.put(endpoint, (0, _stringify2.default)(json));\n    }\n\n    /**\n     * Sends PATCH request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {Blob|BufferSource|FormData|String} body\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'patch',\n    value: function patch(endpoint, body) {\n      return this.fetch(endpoint, {\n        body: body,\n        method: 'PATCH'\n      });\n    }\n\n    /**\n     * Sends PATCH request to the specified endpoint.\n     * @param {String} endpoint\n     * @param {JSON} json\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'patchJson',\n    value: function patchJson(endpoint, json) {\n      return this.patch(endpoint, (0, _stringify2.default)(json));\n    }\n\n    /**\n     * Upload with progress\n     * @param {String} endpoint\n     * @param {Object} body and headers\n     * @param {Function} callback handler for update progress only works for client side for now\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'upload',\n    value: function upload(endpoint, options, onProgress) {\n      var _private2 = this.private,\n          base = _private2.base,\n          token = _private2.token;\n\n      var headers = options.headers ? _lodash2.default.clone(options.headers) : {};\n      if (token) headers.Authorization = 'Bearer ' + token;\n      if (_topcoderReactUtils.isomorphy.isClientSide()) {\n        return new _promise2.default(function (res, rej) {\n          var xhr = new XMLHttpRequest(); //eslint-disable-line\n          xhr.open(options.method, '' + base + endpoint);\n          (0, _keys2.default)(headers).forEach(function (key) {\n            if (headers[key] != null) {\n              xhr.setRequestHeader(key, headers[key]);\n            }\n          });\n          xhr.onload = function (e) {\n            return res(e.target.responseText);\n          };\n          xhr.onerror = rej;\n          if (xhr.upload && onProgress) {\n            xhr.upload.onprogress = function (evt) {\n              if (evt.lengthComputable) onProgress(evt.loaded / evt.total);\n            };\n          }\n          xhr.send(options.body);\n        });\n      }\n      return this.fetch(endpoint, options);\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return Api;\n}();\n\nvar _default = Api;\nexports.default = _default;\n\n/*\n * Topcoder API\n */\n\nvar lastApiInstances = {};\n\n/**\n * Returns a new or existing Api object for Topcoder API.\n * @param {String} version The API version.\n * @param {String} token Optional. Auth token for Topcoder API.\n * @return {Api} API service object.\n */\nfunction getApi(version, token) {\n  if (!version || !_topcoderReactUtils.config.API[version]) {\n    throw new Error(version + ' is not a valid API version');\n  }\n  if (!lastApiInstances[version] || lastApiInstances[version].private.token !== token) {\n    lastApiInstances[version] = new Api(_topcoderReactUtils.config.API[version], token);\n  }\n  return lastApiInstances[version];\n}\n\n/**\n * Keep the old API factories for backwards compatibility\n * DO NOT USE THEM FOR NEW IMPLEMENTATIONS.\n * USE THE getApi(version, token) FACTORY.\n */\nvar getApiV2 = exports.getApiV2 = function getApiV2(token) {\n  return getApi('V2', token);\n};\nvar getApiV3 = exports.getApiV3 = function getApiV3(token) {\n  return getApi('V3', token);\n};\nvar getApiV4 = exports.getApiV4 = function getApiV4(token) {\n  return getApi('V4', token);\n};\n\ngetTcM2mToken.MIN_LIFETIME = 30 * 1000; // [ms]\n\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(MIN_API_CALL_DELAY, 'MIN_API_CALL_DELAY', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(API_THROTTLING, 'API_THROTTLING', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(lastApiCallTimestamp, 'lastApiCallTimestamp', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(Api, 'Api', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(lastApiInstances, 'lastApiInstances', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getApi, 'getApi', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getApiV2, 'getApiV2', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getApiV3, 'getApiV3', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getApiV4, 'getApiV4', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(getTcM2mToken, 'getTcM2mToken', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/api.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/api.js?");
 
 /***/ }),
 
@@ -934,7 +934,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.billing\"\n       * @desc Access to Topcoder billing accounts.\n       */\n\n\n/**\n * @static\n * @member default\n * @desc Default module export is\n *  {@link module:services.billing~Billing} class.\n */\n\n/**\n * Billing service object.\n */\nvar Billing = function () {\n  /**\n   * Creates a new service.\n   * @param {String} tokenV3 Topcoder auth token v3.\n   */\n  function Billing(tokenV3) {\n    (0, _classCallCheck3.default)(this, Billing);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets billing accounts accessible to service user.\n   * @return {Promise} Resolves to the list of billing account objects.\n   */\n\n\n  (0, _createClass3.default)(Billing, [{\n    key: 'getUserBillingAccounts',\n    value: function getUserBillingAccounts() {\n      return this.private.api.fetch();\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return Billing;\n}();\n\nvar lastInstance = null;\n\n/**\n * Returns a new or existing Billing service for the user specified by token.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Billing} Billing service instance.\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || lastInstance.private.tokenV3 !== tokenV3) {\n    lastInstance = new Billing(tokenV3);\n  }\n  return lastInstance;\n}\n\nvar _default = Billing;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(Billing, 'Billing', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/billing.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/billing.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/billing.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/billing.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/billing.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.billing\"\n       * @desc Access to Topcoder billing accounts.\n       */\n\n\n/**\n * @static\n * @member default\n * @desc Default module export is\n *  {@link module:services.billing~Billing} class.\n */\n\n/**\n * Billing service object.\n */\nvar Billing = function () {\n  /**\n   * Creates a new service.\n   * @param {String} tokenV3 Topcoder auth token v3.\n   */\n  function Billing(tokenV3) {\n    (0, _classCallCheck3.default)(this, Billing);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets billing accounts accessible to service user.\n   * @return {Promise} Resolves to the list of billing account objects.\n   */\n\n\n  (0, _createClass3.default)(Billing, [{\n    key: 'getUserBillingAccounts',\n    value: function getUserBillingAccounts() {\n      return this.private.api.fetch();\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return Billing;\n}();\n\nvar lastInstance = null;\n\n/**\n * Returns a new or existing Billing service for the user specified by token.\n * @param {String} tokenV3 Topcoder auth token v3.\n * @return {Billing} Billing service instance.\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || lastInstance.private.tokenV3 !== tokenV3) {\n    lastInstance = new Billing(tokenV3);\n  }\n  return lastInstance;\n}\n\nvar _default = Billing;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(Billing, 'Billing', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/billing.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/billing.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/billing.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/billing.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/billing.js?");
 
 /***/ }),
 
@@ -946,7 +946,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ORDER_BY = undefined;\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _set = __webpack_require__(/*! babel-runtime/core-js/set */ \"babel-runtime/core-js/set\");\n\nvar _set2 = _interopRequireDefault(_set);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\n/**\n * Helper method that checks for HTTP error response and throws Error in this case.\n * @param {Object} res HTTP response object\n * @return {Object} API JSON response object\n * @private\n */\nvar checkError = function () {\n  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(res) {\n    var jsonRes;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            if (res.ok) {\n              _context.next = 3;\n              break;\n            }\n\n            if (res.status >= 500) {\n              (0, _errors.setErrorIcon)(_errors.ERROR_ICON_TYPES.API, '/challenges', res.statusText);\n            }\n            throw new Error(res.statusText);\n\n          case 3:\n            _context.next = 5;\n            return res.json();\n\n          case 5:\n            jsonRes = _context.sent.result;\n\n            if (!(jsonRes.status !== 200)) {\n              _context.next = 8;\n              break;\n            }\n\n            throw new Error(jsonRes.content);\n\n          case 8:\n            return _context.abrupt('return', jsonRes);\n\n          case 9:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function checkError(_x) {\n    return _ref3.apply(this, arguments);\n  };\n}();\n\n/**\n * Challenge service.\n */\n\n\nexports.normalizeChallengeDetails = normalizeChallengeDetails;\nexports.normalizeChallenge = normalizeChallenge;\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.challenges\"\n       * @desc This module provides a service for convenient manipulation with\n       *  Topcoder challenges via TC API.\n       */\n\nvar ORDER_BY = exports.ORDER_BY = {\n  SUBMISSION_END_DATE: 'submissionEndDate'\n};\n\n/**\n * Normalizes a regular challenge details object received from the backend APIs.\n * @todo Why this one is exported? It should be only used internally!\n * @param {Object} challenge Challenge object received from the /challenges/{id}\n *  endpoint.\n * @param {Object} filtered Challenge object received from the\n *  /challenges?filter=id={id} endpoint.\n * @param {Object} user Challenge object received from the\n *  /members/{username}/challenges?filter=id={id} endpoint.\n * If action was fired for authenticated visitor, `user` will contain\n * details fetched specifically for the user (thus may include additional\n * data comparing to the standard API response for the challenge details,\n * stored in `filtered`).\n * @param {String} username Optional.\n * @return {Object} Normalized challenge object.\n */\nfunction normalizeChallengeDetails(challenge, filtered, user, username) {\n  // Normalize exising data to make it consistent with the rest of the code\n  var finalChallenge = (0, _extends3.default)({}, challenge, {\n\n    id: challenge.challengeId,\n    reliabilityBonus: _lodash2.default.get(filtered, 'reliabilityBonus', 0),\n    status: (challenge.currentStatus || '').toUpperCase(),\n\n    allPhases: [],\n    currentPhases: [],\n    name: challenge.challengeName || challenge.challengeTitle,\n    projectId: Number(challenge.projectId),\n    forumId: Number(challenge.forumId),\n    introduction: challenge.introduction || '',\n    detailedRequirements: challenge.detailedRequirements === 'null' ? '' : challenge.detailedRequirements,\n    finalSubmissionGuidelines: challenge.finalSubmissionGuidelines === 'null' ? '' : challenge.finalSubmissionGuidelines,\n    screeningScorecardId: Number(challenge.screeningScorecardId),\n    reviewScorecardId: Number(challenge.reviewScorecardId),\n    numberOfCheckpointsPrizes: challenge.numberOfCheckpointsPrizes,\n    topCheckPointPrize: challenge.topCheckPointPrize,\n    submissionsViewable: challenge.submissionsViewable || 'false',\n    reviewType: challenge.reviewType,\n    allowStockArt: challenge.allowStockArt === 'true',\n    fileTypes: challenge.filetypes || [],\n    environment: challenge.environment,\n    codeRepo: challenge.codeRepo,\n    forumLink: challenge.forumLink,\n    submissionLimit: Number(challenge.submissionLimit) || 0,\n    drPoints: challenge.digitalRunPoints,\n    directUrl: challenge.directUrl,\n    technologies: challenge.technologies || challenge.technology || [],\n    platforms: challenge.platforms || [],\n    prizes: challenge.prize || challenge.prizes || [],\n    events: _lodash2.default.map(challenge.event, function (e) {\n      return {\n        eventName: e.eventShortDesc,\n        eventId: e.id,\n        description: e.eventDescription\n      };\n    }),\n    terms: challenge.terms,\n    submissions: challenge.submissions,\n    track: _lodash2.default.toUpper(challenge.challengeCommunity),\n    subTrack: challenge.subTrack,\n    checkpoints: challenge.checkpoints,\n    documents: challenge.documents || [],\n    numRegistrants: challenge.numberOfRegistrants,\n    numberOfCheckpointSubmissions: challenge.numberOfCheckpointSubmissions,\n    registrants: challenge.registrants || []\n  });\n\n  // Winners have different field names, needs to be normalized to match `filtered` and `challenge`\n  finalChallenge.winners = _lodash2.default.map(challenge.winners, function (winner, index) {\n    return (0, _extends3.default)({}, winner, {\n      handle: winner.submitter,\n      placement: winner.rank || index + 1 // Legacy MMs do not have a rank but are sorted by points\n    });\n  });\n\n  if (finalChallenge.subTrack === 'MARATHON_MATCH') {\n    finalChallenge.track = 'DATA_SCIENCE';\n  }\n\n  // It's not clear if this will be the main event, will need to be investigated\n  finalChallenge.mainEvent = finalChallenge.events[0] || {};\n\n  /* It's unclear if these normalization steps are still required for `challenge` */\n  // Fill missing data from filtered\n  if (filtered) {\n    var groups = {};\n    if (filtered.groupIds) {\n      filtered.groupIds.forEach(function (id) {\n        groups[id] = true;\n      });\n    }\n\n    _lodash2.default.merge(finalChallenge, {\n      componentId: filtered.componentId,\n      contestId: filtered.contestId,\n\n      submissionEndDate: filtered.submissionEndDate, // Dates are not correct in `challenge`\n      submissionEndTimestamp: filtered.submissionEndDate, // Dates are not correct in `challenge`\n\n      /* Taking phases from filtered, because dates are not correct in `challenge` */\n      allPhases: filtered.allPhases || [],\n\n      /* Taking phases from filtered, because dates are not correct in `challenge` */\n      currentPhases: filtered.currentPhases || [],\n\n      /* `challenge` has incorrect value for numberOfSubmissions for some reason */\n      numSubmissions: filtered.numSubmissions,\n      groups: groups\n    });\n  }\n\n  // Fill missing data from user\n  if (user) {\n    _lodash2.default.defaults(finalChallenge, {\n      userDetails: user.userDetails\n    });\n  }\n\n  // Fill some derived data\n  var registrationOpen = _lodash2.default.some(finalChallenge.allPhases, function (phase) {\n    return phase.phaseType === 'Registration' && phase.phaseStatus === 'Open';\n  }) ? 'Yes' : 'No';\n  _lodash2.default.defaults(finalChallenge, {\n    communities: new _set2.default([_tc.COMPETITION_TRACKS[finalChallenge.track]]),\n    registrationOpen: registrationOpen,\n    users: username ? (0, _defineProperty3.default)({}, username, true) : {}\n  });\n\n  // A hot fix to show submissions for on-going challenges\n  if (!finalChallenge.submissions || !finalChallenge.submissions.length) {\n    finalChallenge.submissions = finalChallenge.registrants.filter(function (r) {\n      return r.submissionDate || '';\n    }).sort(function (a, b) {\n      return (a.submissionDate || '').localeCompare(b.submissionDate || '');\n    });\n  }\n\n  if (!finalChallenge.allPhases) finalChallenge.allPhases = [];\n  if (!finalChallenge.track) finalChallenge.track = '';\n\n  return finalChallenge;\n}\n\n/**\n * Normalizes a regular challenge object received from the backend.\n * NOTE: This function is copied from the existing code in the challenge listing\n * component. It is possible, that this normalization is not necessary after we\n * have moved to Topcoder API, but it is kept for now to minimize a risk of\n * breaking anything.\n * @todo Should be used only internally!\n * @param {Object} challenge Challenge object received from the backend.\n * @param {String} username Optional.\n */\nfunction normalizeChallenge(challenge, username) {\n  var registrationOpen = challenge.allPhases.filter(function (d) {\n    return d.phaseType === 'Registration';\n  })[0].phaseStatus === 'Open' ? 'Yes' : 'No';\n  var groups = {};\n  if (challenge.groupIds) {\n    challenge.groupIds.forEach(function (id) {\n      groups[id] = true;\n    });\n  }\n  /* eslint-disable no-param-reassign */\n  if (!challenge.prizes) challenge.prizes = challenge.prize || [];\n  if (!challenge.totalPrize) {\n    challenge.totalPrize = challenge.prizes.reduce(function (sum, x) {\n      return sum + x;\n    }, 0);\n  }\n  if (!challenge.technologies) challenge.technologies = [];\n  if (!challenge.platforms) challenge.platforms = [];\n\n  if (challenge.subTrack === 'DEVELOP_MARATHON_MATCH') {\n    challenge.track = 'DATA_SCIENCE';\n  }\n  /* eslint-enable no-param-reassign */\n\n  _lodash2.default.defaults(challenge, {\n    communities: new _set2.default([_tc.COMPETITION_TRACKS[challenge.track]]),\n    groups: groups,\n    registrationOpen: registrationOpen,\n    submissionEndTimestamp: challenge.submissionEndDate,\n    users: username ? (0, _defineProperty3.default)({}, username, true) : {}\n  });\n}\nvar ChallengesService = function () {\n  /**\n   * Creates a new ChallengeService instance.\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n   */\n  function ChallengesService(tokenV3, tokenV2) {\n    var _this = this;\n\n    (0, _classCallCheck3.default)(this, ChallengesService);\n\n    /**\n     * Private function being re-used in all methods related to getting\n     * challenges. It handles query-related arguments in the uniform way:\n     * @param {String} endpoint API endpoint, where the request will be send.\n     * @param {Object} filters Optional. A map of filters to pass as `filter`\n     *  query parameter (this function takes care to stringify it properly).\n     * @param {Object} params Optional. A map of any other parameters beside\n     *  `filter`.\n     */\n    var getChallenges = function () {\n      var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(endpoint) {\n        var filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n        var query, url, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                query = (0, _extends3.default)({\n                  filter: _qs2.default.stringify(filters, { encode: false }).replace('&', '%26')\n                }, params);\n                url = endpoint + '?' + _qs2.default.stringify(query, { encode: false });\n                _context2.next = 4;\n                return _this.private.api.get(url).then(checkError);\n\n              case 4:\n                res = _context2.sent;\n                return _context2.abrupt('return', {\n                  challenges: res.content || [],\n                  totalCount: res.metadata.totalCount,\n                  meta: res.metadata\n                });\n\n              case 6:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, _this);\n      }));\n\n      return function getChallenges(_x2) {\n        return _ref4.apply(this, arguments);\n      };\n    }();\n\n    this.private = {\n      api: (0, _api.getApi)('V4', tokenV3),\n      apiV2: (0, _api.getApi)('V2', tokenV2),\n      getChallenges: getChallenges,\n      tokenV2: tokenV2,\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Activates the specified challenge.\n   * @param {Number} challengeId\n   * @return {Promise} Resolves to null value in case of success; otherwise it\n   *  is rejected.\n   */\n\n\n  (0, _createClass3.default)(ChallengesService, [{\n    key: 'activate',\n    value: function () {\n      var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(challengeId) {\n        var res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                _context3.next = 2;\n                return this.private.api.post('/challenges/' + challengeId + '/activate');\n\n              case 2:\n                res = _context3.sent;\n\n                if (res.ok) {\n                  _context3.next = 5;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 5:\n                _context3.next = 7;\n                return res.json();\n\n              case 7:\n                res = _context3.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context3.next = 10;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 10:\n                return _context3.abrupt('return', res.content);\n\n              case 11:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function activate(_x5) {\n        return _ref5.apply(this, arguments);\n      }\n\n      return activate;\n    }()\n\n    /**\n     * Closes the specified challenge.\n     * @param {Number} challengeId\n     * @param {Number} winnerId Optional. ID of the assignee to declare the\n     *  winner.\n     * @return {Promise} Resolves to null value in case of success; otherwise it\n     *  is rejected.\n     */\n\n  }, {\n    key: 'close',\n    value: function () {\n      var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(challengeId, winnerId) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                url = '/challenges/' + challengeId + '/close';\n\n                if (winnerId) url = url + '?winnerId=' + winnerId;\n                _context4.next = 4;\n                return this.private.api.post(url);\n\n              case 4:\n                res = _context4.sent;\n\n                if (res.ok) {\n                  _context4.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context4.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context4.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context4.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context4.abrupt('return', res.content);\n\n              case 13:\n              case 'end':\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function close(_x6, _x7) {\n        return _ref6.apply(this, arguments);\n      }\n\n      return close;\n    }()\n\n    /**\n     * Creates a new payment task.\n     * @param {Number} projectId\n     * @param {Number} accountId Billing account ID.\n     * @param {String} title\n     * @param {String} description\n     * @param {String} assignee\n     * @param {Number} payment\n     * @param {String} submissionGuidelines\n     * @param {Number} copilotId\n     * @param {Number} copilotFee\n     * @param {?} technologies\n     * @return {Promise} Resolves to the created challenge object (payment task).\n     */\n\n  }, {\n    key: 'createTask',\n    value: function () {\n      var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(projectId, accountId, title, description, assignee, payment, submissionGuidelines, copilotId, copilotFee, technologies) {\n        var payload, res;\n        return _regenerator2.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                payload = {\n                  param: {\n                    assignees: [assignee],\n                    billingAccountId: accountId,\n                    confidentialityType: 'public',\n                    detailedRequirements: description,\n                    submissionGuidelines: submissionGuidelines,\n                    milestoneId: 1,\n                    name: title,\n                    technologies: technologies,\n                    prizes: payment ? [payment] : [],\n                    projectId: projectId,\n                    registrationStartsAt: (0, _moment2.default)().toISOString(),\n                    reviewType: 'INTERNAL',\n                    subTrack: 'FIRST_2_FINISH',\n                    task: true\n                  }\n                };\n\n                if (copilotId) {\n                  _lodash2.default.assign(payload.param, {\n                    copilotId: copilotId,\n                    copilotFee: copilotFee\n                  });\n                }\n                _context5.next = 4;\n                return this.private.api.postJson('/challenges', payload);\n\n              case 4:\n                res = _context5.sent;\n\n                if (res.ok) {\n                  _context5.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context5.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context5.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context5.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context5.abrupt('return', res.content);\n\n              case 13:\n              case 'end':\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this);\n      }));\n\n      function createTask(_x8, _x9, _x10, _x11, _x12, _x13, _x14, _x15, _x16, _x17) {\n        return _ref7.apply(this, arguments);\n      }\n\n      return createTask;\n    }()\n\n    /**\n     * Gets challenge details from Topcoder API.\n     * NOTE: This function also uses API v2 and other endpoints for now, due\n     * to some information is missing or\n     * incorrect in the main endpoint. This may change in the future.\n     * @param {Number|String} challengeId\n     * @return {Promise} Resolves to the challenge object.\n     */\n\n  }, {\n    key: 'getChallengeDetails',\n    value: function () {\n      var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(challengeId) {\n        var challenge, challengeFiltered, username, challengeUser, finalChallenge;\n        return _regenerator2.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                _context6.next = 2;\n                return this.private.api.get('/challenges/' + challengeId).then(checkError).then(function (res) {\n                  return res.content;\n                });\n\n              case 2:\n                challenge = _context6.sent;\n                _context6.next = 5;\n                return this.private.getChallenges('/challenges/', { id: challengeId }).then(function (res) {\n                  return res.challenges[0];\n                });\n\n              case 5:\n                challengeFiltered = _context6.sent;\n                username = this.private.tokenV3 && (0, _tcAccounts.decodeToken)(this.private.tokenV3).handle;\n                _context6.t0 = username;\n\n                if (!_context6.t0) {\n                  _context6.next = 12;\n                  break;\n                }\n\n                _context6.next = 11;\n                return this.getUserChallenges(username, { id: challengeId }).then(function (res) {\n                  return res.challenges[0];\n                }).catch(function () {\n                  return null;\n                });\n\n              case 11:\n                _context6.t0 = _context6.sent;\n\n              case 12:\n                challengeUser = _context6.t0;\n                finalChallenge = normalizeChallengeDetails(challenge, challengeFiltered, challengeUser, username);\n\n\n                finalChallenge.fetchedWithAuth = Boolean(this.private.api.private.token);\n\n                return _context6.abrupt('return', finalChallenge);\n\n              case 16:\n              case 'end':\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this);\n      }));\n\n      function getChallengeDetails(_x18) {\n        return _ref8.apply(this, arguments);\n      }\n\n      return getChallengeDetails;\n    }()\n\n    /**\n     * Gets possible challenge subtracks.\n     * @return {Promise} Resolves to the array of subtrack names.\n     */\n\n  }, {\n    key: 'getChallengeSubtracks',\n    value: function getChallengeSubtracks() {\n      return this.private.api.get('/challenge-types').then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      }).then(function (res) {\n        return res.result.status === 200 ? res.result.content : new Error(res.result.content);\n      });\n    }\n\n    /**\n     * Gets possible challenge tags (technologies).\n     * @return {Promise} Resolves to the array of tag strings.\n     */\n\n  }, {\n    key: 'getChallengeTags',\n    value: function getChallengeTags() {\n      return this.private.api.get('/technologies').then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      }).then(function (res) {\n        return res.result.status === 200 ? res.result.content : new Error(res.result.content);\n      });\n    }\n\n    /**\n     * Gets challenges.\n     * @param {Object} filters Optional.\n     * @param {Object} params Optional.\n     * @return {Promise} Resolves to the api response.\n     */\n\n  }, {\n    key: 'getChallenges',\n    value: function getChallenges(filters, params) {\n      return this.private.getChallenges('/challenges/', filters, params).then(function (res) {\n        res.challenges.forEach(function (item) {\n          return normalizeChallenge(item);\n        });\n        return res;\n      });\n    }\n\n    /**\n     * Gets SRM matches.\n     * @param {Object} params\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'getSrms',\n    value: function () {\n      var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(params) {\n        var res;\n        return _regenerator2.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                _context7.next = 2;\n                return this.private.api.get('/srms/?' + _qs2.default.stringify(params));\n\n              case 2:\n                res = _context7.sent;\n                return _context7.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context7.stop();\n            }\n          }\n        }, _callee7, this);\n      }));\n\n      function getSrms(_x19) {\n        return _ref9.apply(this, arguments);\n      }\n\n      return getSrms;\n    }()\n\n    /**\n     * Gets challenges of the specified user.\n     * @param {String} username User whose challenges we want to fetch.\n     * @param {Object} filters Optional.\n     * @param {Number} params Optional.\n     * @return {Promise} Resolves to the api response.\n     */\n\n  }, {\n    key: 'getUserChallenges',\n    value: function getUserChallenges(username, filters, params) {\n      var endpoint = '/members/' + username.toLowerCase() + '/challenges/';\n      return this.private.getChallenges(endpoint, filters, params).then(function (res) {\n        res.challenges.forEach(function (item) {\n          return normalizeChallenge(item, username);\n        });\n        return res;\n      });\n    }\n\n    /**\n     * Gets marathon matches of the specified user.\n     * @param {String} username User whose challenges we want to fetch.\n     * @param {Object} filters Optional.\n     * @param {Number} params Optional.\n     * @return {Promise} Resolves to the api response.\n     */\n\n  }, {\n    key: 'getUserMarathonMatches',\n    value: function getUserMarathonMatches(username, filters, params) {\n      var endpoint = '/members/' + username.toLowerCase() + '/mms/';\n      return this.private.getChallenges(endpoint, filters, params);\n    }\n\n    /**\n     * Gets SRM matches related to the user.\n     * @param {String} handle\n     * @param {Object} params\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'getUserSrms',\n    value: function () {\n      var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(handle, params) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                url = '/members/' + handle + '/srms/?' + _qs2.default.stringify(params);\n                _context8.next = 3;\n                return this.private.api.get(url);\n\n              case 3:\n                res = _context8.sent;\n                return _context8.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context8.stop();\n            }\n          }\n        }, _callee8, this);\n      }));\n\n      function getUserSrms(_x20, _x21) {\n        return _ref10.apply(this, arguments);\n      }\n\n      return getUserSrms;\n    }()\n\n    /**\n     * Registers user to the specified challenge.\n     * @param {String} challengeId\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'register',\n    value: function () {\n      var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(challengeId) {\n        var endpoint, res;\n        return _regenerator2.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                endpoint = '/challenges/' + challengeId + '/register';\n                _context9.next = 3;\n                return this.private.api.postJson(endpoint);\n\n              case 3:\n                res = _context9.sent;\n\n                if (res.ok) {\n                  _context9.next = 6;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 6:\n                return _context9.abrupt('return', res.json());\n\n              case 7:\n              case 'end':\n                return _context9.stop();\n            }\n          }\n        }, _callee9, this);\n      }));\n\n      function register(_x22) {\n        return _ref11.apply(this, arguments);\n      }\n\n      return register;\n    }()\n\n    /**\n     * Unregisters user from the specified challenge.\n     * @param {String} challengeId\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'unregister',\n    value: function () {\n      var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(challengeId) {\n        var endpoint, res;\n        return _regenerator2.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                endpoint = '/challenges/' + challengeId + '/unregister';\n                _context10.next = 3;\n                return this.private.api.post(endpoint);\n\n              case 3:\n                res = _context10.sent;\n\n                if (res.ok) {\n                  _context10.next = 6;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 6:\n                return _context10.abrupt('return', res.json());\n\n              case 7:\n              case 'end':\n                return _context10.stop();\n            }\n          }\n        }, _callee10, this);\n      }));\n\n      function unregister(_x23) {\n        return _ref12.apply(this, arguments);\n      }\n\n      return unregister;\n    }()\n\n    /**\n     * Gets count of user's active challenges.\n     * @param {String} handle Topcoder user handle.\n     * @return {Action} Resolves to the api response.\n     */\n\n  }, {\n    key: 'getActiveChallengesCount',\n    value: function getActiveChallengesCount(handle) {\n      var filter = { status: 'ACTIVE' };\n      var params = { limit: 1, offset: 0 };\n      return this.getUserChallenges(handle, filter, params).then(function (res) {\n        return res.totalCount;\n      });\n    }\n\n    /**\n     * Submits a challenge submission.  Uses APIV2 for Development submission\n     * and APIV3 for Design submisisons.\n     * @param {Object} body\n     * @param {String} challengeId\n     * @param {String} track Either DESIGN or DEVELOP\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'submit',\n    value: function submit(body, challengeId, track, onProgress) {\n      var api = void 0;\n      var contentType = void 0;\n      var url = void 0;\n\n      if (track === 'DESIGN') {\n        api = this.private.api;\n\n        contentType = 'application/json';\n        url = '/submissions/'; // The submission info is contained entirely in the JSON body\n      } else {\n        api = this.private.apiV2;\n        // contentType = 'multipart/form-data';\n        contentType = null;\n        url = '/develop/challenges/' + challengeId + '/upload';\n      }\n\n      return api.upload(url, {\n        body: body,\n        headers: { 'Content-Type': contentType },\n        method: 'POST'\n      }, onProgress).then(function (res) {\n        var jres = JSON.parse(res);\n        // Return result for Develop submission\n        if (track === 'DEVELOP') {\n          return jres;\n        }\n        // Design Submission requires an extra \"Processing\" POST\n        var procId = jres.result.content.id;\n        return api.upload('/submissions/' + procId + '/process/', {\n          body: (0, _stringify2.default)({ param: jres.result.content }),\n          headers: { 'Content-Type': contentType },\n          method: 'POST'\n        }, onProgress).then(function (procres) {\n          return JSON.parse(procres);\n        });\n      }, function (err) {\n        _logger2.default.error('Failed to submit to the challenge #' + challengeId, err);\n        throw err;\n      });\n    }\n\n    /**\n     * Updates the challenge (saves the give challenge to the API).\n     * @param {Object} challenge\n     * @param {String} tokenV3\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'updateChallenge',\n    value: function () {\n      var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(challenge) {\n        var URL, body, res;\n        return _regenerator2.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                URL = '/challenges/' + challenge.id;\n                body = { param: challenge };\n                _context11.next = 4;\n                return this.private.api.putJson(URL, body);\n\n              case 4:\n                res = _context11.sent;\n\n                if (res.ok) {\n                  _context11.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context11.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context11.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context11.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context11.abrupt('return', res.content);\n\n              case 13:\n              case 'end':\n                return _context11.stop();\n            }\n          }\n        }, _callee11, this);\n      }));\n\n      function updateChallenge(_x24) {\n        return _ref13.apply(this, arguments);\n      }\n\n      return updateChallenge;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return ChallengesService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing challenges service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n * @return {ChallengesService} Challenges service object\n */\nfunction getService(tokenV3, tokenV2) {\n  if (!lastInstance || lastInstance.private.tokenV3 !== tokenV3 || lastInstance.tokenV2 !== tokenV2) {\n    lastInstance = new ChallengesService(tokenV3, tokenV2);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(ORDER_BY, 'ORDER_BY', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(normalizeChallengeDetails, 'normalizeChallengeDetails', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(normalizeChallenge, 'normalizeChallenge', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(checkError, 'checkError', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(ChallengesService, 'ChallengesService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/challenges.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/challenges.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ORDER_BY = undefined;\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _set = __webpack_require__(/*! babel-runtime/core-js/set */ \"babel-runtime/core-js/set\");\n\nvar _set2 = _interopRequireDefault(_set);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\n/**\n * Helper method that checks for HTTP error response and throws Error in this case.\n * @param {Object} res HTTP response object\n * @return {Object} API JSON response object\n * @private\n */\nvar checkError = function () {\n  var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(res) {\n    var jsonRes;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            if (res.ok) {\n              _context.next = 3;\n              break;\n            }\n\n            if (res.status >= 500) {\n              (0, _errors.setErrorIcon)(_errors.ERROR_ICON_TYPES.API, '/challenges', res.statusText);\n            }\n            throw new Error(res.statusText);\n\n          case 3:\n            _context.next = 5;\n            return res.json();\n\n          case 5:\n            jsonRes = _context.sent.result;\n\n            if (!(jsonRes.status !== 200)) {\n              _context.next = 8;\n              break;\n            }\n\n            throw new Error(jsonRes.content);\n\n          case 8:\n            return _context.abrupt('return', jsonRes);\n\n          case 9:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function checkError(_x) {\n    return _ref3.apply(this, arguments);\n  };\n}();\n\n/**\n * Challenge service.\n */\n\n\nexports.normalizeChallengeDetails = normalizeChallengeDetails;\nexports.normalizeChallenge = normalizeChallenge;\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _tcAccounts = __webpack_require__(/*! tc-accounts */ \"tc-accounts\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _errors = __webpack_require__(/*! ../utils/errors */ \"./src/utils/errors.js\");\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.challenges\"\n       * @desc This module provides a service for convenient manipulation with\n       *  Topcoder challenges via TC API.\n       */\n\nvar ORDER_BY = exports.ORDER_BY = {\n  SUBMISSION_END_DATE: 'submissionEndDate'\n};\n\n/**\n * Normalizes a regular challenge details object received from the backend APIs.\n * @todo Why this one is exported? It should be only used internally!\n * @param {Object} challenge Challenge object received from the /challenges/{id}\n *  endpoint.\n * @param {Object} filtered Challenge object received from the\n *  /challenges?filter=id={id} endpoint.\n * @param {Object} user Challenge object received from the\n *  /members/{username}/challenges?filter=id={id} endpoint.\n * If action was fired for authenticated visitor, `user` will contain\n * details fetched specifically for the user (thus may include additional\n * data comparing to the standard API response for the challenge details,\n * stored in `filtered`).\n * @param {String} username Optional.\n * @return {Object} Normalized challenge object.\n */\nfunction normalizeChallengeDetails(challenge, filtered, user, username) {\n  // Normalize exising data to make it consistent with the rest of the code\n  var finalChallenge = (0, _extends3.default)({}, challenge, {\n\n    id: challenge.challengeId,\n    reliabilityBonus: _lodash2.default.get(filtered, 'reliabilityBonus', 0),\n    status: (challenge.currentStatus || '').toUpperCase(),\n\n    allPhases: [],\n    currentPhases: [],\n    name: challenge.challengeName || challenge.challengeTitle,\n    projectId: Number(challenge.projectId),\n    forumId: Number(challenge.forumId),\n    introduction: challenge.introduction || '',\n    detailedRequirements: challenge.detailedRequirements === 'null' ? '' : challenge.detailedRequirements,\n    finalSubmissionGuidelines: challenge.finalSubmissionGuidelines === 'null' ? '' : challenge.finalSubmissionGuidelines,\n    screeningScorecardId: Number(challenge.screeningScorecardId),\n    reviewScorecardId: Number(challenge.reviewScorecardId),\n    numberOfCheckpointsPrizes: challenge.numberOfCheckpointsPrizes,\n    topCheckPointPrize: challenge.topCheckPointPrize,\n    submissionsViewable: challenge.submissionsViewable || 'false',\n    reviewType: challenge.reviewType,\n    allowStockArt: challenge.allowStockArt === 'true',\n    fileTypes: challenge.filetypes || [],\n    environment: challenge.environment,\n    codeRepo: challenge.codeRepo,\n    forumLink: challenge.forumLink,\n    submissionLimit: Number(challenge.submissionLimit) || 0,\n    drPoints: challenge.digitalRunPoints,\n    directUrl: challenge.directUrl,\n    technologies: challenge.technologies || challenge.technology || [],\n    platforms: challenge.platforms || [],\n    prizes: challenge.prize || challenge.prizes || [],\n    events: _lodash2.default.map(challenge.event, function (e) {\n      return {\n        eventName: e.eventShortDesc,\n        eventId: e.id,\n        description: e.eventDescription\n      };\n    }),\n    terms: challenge.terms,\n    submissions: challenge.submissions,\n    track: _lodash2.default.toUpper(challenge.challengeCommunity),\n    subTrack: challenge.subTrack,\n    checkpoints: challenge.checkpoints,\n    documents: challenge.documents || [],\n    numRegistrants: challenge.numberOfRegistrants,\n    numberOfCheckpointSubmissions: challenge.numberOfCheckpointSubmissions,\n    registrants: challenge.registrants || []\n  });\n\n  // Winners have different field names, needs to be normalized to match `filtered` and `challenge`\n  finalChallenge.winners = _lodash2.default.map(challenge.winners, function (winner, index) {\n    return (0, _extends3.default)({}, winner, {\n      handle: winner.submitter,\n      placement: winner.rank || index + 1 // Legacy MMs do not have a rank but are sorted by points\n    });\n  });\n\n  if (finalChallenge.subTrack === 'MARATHON_MATCH') {\n    finalChallenge.track = 'DATA_SCIENCE';\n  }\n\n  // It's not clear if this will be the main event, will need to be investigated\n  finalChallenge.mainEvent = finalChallenge.events[0] || {};\n\n  /* It's unclear if these normalization steps are still required for `challenge` */\n  // Fill missing data from filtered\n  if (filtered) {\n    var groups = {};\n    if (filtered.groupIds) {\n      filtered.groupIds.forEach(function (id) {\n        groups[id] = true;\n      });\n    }\n\n    _lodash2.default.merge(finalChallenge, {\n      componentId: filtered.componentId,\n      contestId: filtered.contestId,\n\n      submissionEndDate: filtered.submissionEndDate, // Dates are not correct in `challenge`\n      submissionEndTimestamp: filtered.submissionEndDate, // Dates are not correct in `challenge`\n\n      /* Taking phases from filtered, because dates are not correct in `challenge` */\n      allPhases: filtered.allPhases || [],\n\n      /* Taking phases from filtered, because dates are not correct in `challenge` */\n      currentPhases: filtered.currentPhases || [],\n\n      /* `challenge` has incorrect value for numberOfSubmissions for some reason */\n      numSubmissions: filtered.numSubmissions,\n      groups: groups\n    });\n  }\n\n  // Fill missing data from user\n  if (user) {\n    _lodash2.default.defaults(finalChallenge, {\n      userDetails: user.userDetails\n    });\n  }\n\n  // Fill some derived data\n  var registrationOpen = _lodash2.default.some(finalChallenge.allPhases, function (phase) {\n    return phase.phaseType === 'Registration' && phase.phaseStatus === 'Open';\n  }) ? 'Yes' : 'No';\n  _lodash2.default.defaults(finalChallenge, {\n    communities: new _set2.default([_tc.COMPETITION_TRACKS[finalChallenge.track]]),\n    registrationOpen: registrationOpen,\n    users: username ? (0, _defineProperty3.default)({}, username, true) : {}\n  });\n\n  // A hot fix to show submissions for on-going challenges\n  if (!finalChallenge.submissions || !finalChallenge.submissions.length) {\n    finalChallenge.submissions = finalChallenge.registrants.filter(function (r) {\n      return r.submissionDate || '';\n    }).sort(function (a, b) {\n      return (a.submissionDate || '').localeCompare(b.submissionDate || '');\n    });\n  }\n\n  if (!finalChallenge.allPhases) finalChallenge.allPhases = [];\n  if (!finalChallenge.track) finalChallenge.track = '';\n\n  return finalChallenge;\n}\n\n/**\n * Normalizes a regular challenge object received from the backend.\n * NOTE: This function is copied from the existing code in the challenge listing\n * component. It is possible, that this normalization is not necessary after we\n * have moved to Topcoder API, but it is kept for now to minimize a risk of\n * breaking anything.\n * @todo Should be used only internally!\n * @param {Object} challenge Challenge object received from the backend.\n * @param {String} username Optional.\n */\nfunction normalizeChallenge(challenge, username) {\n  var registrationOpen = challenge.allPhases.filter(function (d) {\n    return d.phaseType === 'Registration';\n  })[0].phaseStatus === 'Open' ? 'Yes' : 'No';\n  var groups = {};\n  if (challenge.groupIds) {\n    challenge.groupIds.forEach(function (id) {\n      groups[id] = true;\n    });\n  }\n  /* eslint-disable no-param-reassign */\n  if (!challenge.prizes) challenge.prizes = challenge.prize || [];\n  if (!challenge.totalPrize) {\n    challenge.totalPrize = challenge.prizes.reduce(function (sum, x) {\n      return sum + x;\n    }, 0);\n  }\n  if (!challenge.technologies) challenge.technologies = [];\n  if (!challenge.platforms) challenge.platforms = [];\n\n  if (challenge.subTrack === 'DEVELOP_MARATHON_MATCH') {\n    challenge.track = 'DATA_SCIENCE';\n  }\n  /* eslint-enable no-param-reassign */\n\n  _lodash2.default.defaults(challenge, {\n    communities: new _set2.default([_tc.COMPETITION_TRACKS[challenge.track]]),\n    groups: groups,\n    registrationOpen: registrationOpen,\n    submissionEndTimestamp: challenge.submissionEndDate,\n    users: username ? (0, _defineProperty3.default)({}, username, true) : {}\n  });\n}\nvar ChallengesService = function () {\n  /**\n   * Creates a new ChallengeService instance.\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n   */\n  function ChallengesService(tokenV3, tokenV2) {\n    var _this = this;\n\n    (0, _classCallCheck3.default)(this, ChallengesService);\n\n    /**\n     * Private function being re-used in all methods related to getting\n     * challenges. It handles query-related arguments in the uniform way:\n     * @param {String} endpoint API endpoint, where the request will be send.\n     * @param {Object} filters Optional. A map of filters to pass as `filter`\n     *  query parameter (this function takes care to stringify it properly).\n     * @param {Object} params Optional. A map of any other parameters beside\n     *  `filter`.\n     */\n    var getChallenges = function () {\n      var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(endpoint) {\n        var filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n        var query, url, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                query = (0, _extends3.default)({\n                  filter: _qs2.default.stringify(filters, { encode: false }).replace('&', '%26')\n                }, params);\n                url = endpoint + '?' + _qs2.default.stringify(query, { encode: false });\n                _context2.next = 4;\n                return _this.private.api.get(url).then(checkError);\n\n              case 4:\n                res = _context2.sent;\n                return _context2.abrupt('return', {\n                  challenges: res.content || [],\n                  totalCount: res.metadata.totalCount,\n                  meta: res.metadata\n                });\n\n              case 6:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, _this);\n      }));\n\n      return function getChallenges(_x2) {\n        return _ref4.apply(this, arguments);\n      };\n    }();\n\n    this.private = {\n      api: (0, _api.getApi)('V4', tokenV3),\n      apiV2: (0, _api.getApi)('V2', tokenV2),\n      getChallenges: getChallenges,\n      tokenV2: tokenV2,\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Activates the specified challenge.\n   * @param {Number} challengeId\n   * @return {Promise} Resolves to null value in case of success; otherwise it\n   *  is rejected.\n   */\n\n\n  (0, _createClass3.default)(ChallengesService, [{\n    key: 'activate',\n    value: function () {\n      var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(challengeId) {\n        var res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                _context3.next = 2;\n                return this.private.api.post('/challenges/' + challengeId + '/activate');\n\n              case 2:\n                res = _context3.sent;\n\n                if (res.ok) {\n                  _context3.next = 5;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 5:\n                _context3.next = 7;\n                return res.json();\n\n              case 7:\n                res = _context3.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context3.next = 10;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 10:\n                return _context3.abrupt('return', res.content);\n\n              case 11:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function activate(_x5) {\n        return _ref5.apply(this, arguments);\n      }\n\n      return activate;\n    }()\n\n    /**\n     * Closes the specified challenge.\n     * @param {Number} challengeId\n     * @param {Number} winnerId Optional. ID of the assignee to declare the\n     *  winner.\n     * @return {Promise} Resolves to null value in case of success; otherwise it\n     *  is rejected.\n     */\n\n  }, {\n    key: 'close',\n    value: function () {\n      var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(challengeId, winnerId) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                url = '/challenges/' + challengeId + '/close';\n\n                if (winnerId) url = url + '?winnerId=' + winnerId;\n                _context4.next = 4;\n                return this.private.api.post(url);\n\n              case 4:\n                res = _context4.sent;\n\n                if (res.ok) {\n                  _context4.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context4.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context4.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context4.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context4.abrupt('return', res.content);\n\n              case 13:\n              case 'end':\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function close(_x6, _x7) {\n        return _ref6.apply(this, arguments);\n      }\n\n      return close;\n    }()\n\n    /**\n     * Creates a new payment task.\n     * @param {Number} projectId\n     * @param {Number} accountId Billing account ID.\n     * @param {String} title\n     * @param {String} description\n     * @param {String} assignee\n     * @param {Number} payment\n     * @param {String} submissionGuidelines\n     * @param {Number} copilotId\n     * @param {Number} copilotFee\n     * @param {?} technologies\n     * @return {Promise} Resolves to the created challenge object (payment task).\n     */\n\n  }, {\n    key: 'createTask',\n    value: function () {\n      var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(projectId, accountId, title, description, assignee, payment, submissionGuidelines, copilotId, copilotFee, technologies) {\n        var payload, res;\n        return _regenerator2.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                payload = {\n                  param: {\n                    assignees: [assignee],\n                    billingAccountId: accountId,\n                    confidentialityType: 'public',\n                    detailedRequirements: description,\n                    submissionGuidelines: submissionGuidelines,\n                    milestoneId: 1,\n                    name: title,\n                    technologies: technologies,\n                    prizes: payment ? [payment] : [],\n                    projectId: projectId,\n                    registrationStartsAt: (0, _moment2.default)().toISOString(),\n                    reviewType: 'INTERNAL',\n                    subTrack: 'FIRST_2_FINISH',\n                    task: true\n                  }\n                };\n\n                if (copilotId) {\n                  _lodash2.default.assign(payload.param, {\n                    copilotId: copilotId,\n                    copilotFee: copilotFee\n                  });\n                }\n                _context5.next = 4;\n                return this.private.api.postJson('/challenges', payload);\n\n              case 4:\n                res = _context5.sent;\n\n                if (res.ok) {\n                  _context5.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context5.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context5.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context5.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context5.abrupt('return', res.content);\n\n              case 13:\n              case 'end':\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this);\n      }));\n\n      function createTask(_x8, _x9, _x10, _x11, _x12, _x13, _x14, _x15, _x16, _x17) {\n        return _ref7.apply(this, arguments);\n      }\n\n      return createTask;\n    }()\n\n    /**\n     * Gets challenge details from Topcoder API.\n     * NOTE: This function also uses API v2 and other endpoints for now, due\n     * to some information is missing or\n     * incorrect in the main endpoint. This may change in the future.\n     * @param {Number|String} challengeId\n     * @return {Promise} Resolves to the challenge object.\n     */\n\n  }, {\n    key: 'getChallengeDetails',\n    value: function () {\n      var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(challengeId) {\n        var challenge, challengeFiltered, decodedToken, username, userId, challengeUser, finalChallenge;\n        return _regenerator2.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                _context6.next = 2;\n                return this.private.api.get('/challenges/' + challengeId).then(checkError).then(function (res) {\n                  return res.content;\n                });\n\n              case 2:\n                challenge = _context6.sent;\n                _context6.next = 5;\n                return this.private.getChallenges('/challenges/', { id: challengeId }).then(function (res) {\n                  return res.challenges[0];\n                });\n\n              case 5:\n                challengeFiltered = _context6.sent;\n                decodedToken = this.private.tokenV3 && (0, _tcAccounts.decodeToken)(this.private.tokenV3);\n                username = decodedToken.handle;\n                userId = decodedToken.userId;\n                _context6.t0 = username;\n\n                if (!_context6.t0) {\n                  _context6.next = 14;\n                  break;\n                }\n\n                _context6.next = 13;\n                return this.getUserChallenges(userId, username, { id: challengeId }).then(function (res) {\n                  return res.challenges[0];\n                }).catch(function () {\n                  return null;\n                });\n\n              case 13:\n                _context6.t0 = _context6.sent;\n\n              case 14:\n                challengeUser = _context6.t0;\n                finalChallenge = normalizeChallengeDetails(challenge, challengeFiltered, challengeUser, username);\n\n\n                finalChallenge.fetchedWithAuth = Boolean(this.private.api.private.token);\n\n                return _context6.abrupt('return', finalChallenge);\n\n              case 18:\n              case 'end':\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this);\n      }));\n\n      function getChallengeDetails(_x18) {\n        return _ref8.apply(this, arguments);\n      }\n\n      return getChallengeDetails;\n    }()\n\n    /**\n     * Gets possible challenge subtracks.\n     * @return {Promise} Resolves to the array of subtrack names.\n     */\n\n  }, {\n    key: 'getChallengeSubtracks',\n    value: function getChallengeSubtracks() {\n      return this.private.api.get('/challenge-types').then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      }).then(function (res) {\n        return res.result.status === 200 ? res.result.content : new Error(res.result.content);\n      });\n    }\n\n    /**\n     * Gets possible challenge tags (technologies).\n     * @return {Promise} Resolves to the array of tag strings.\n     */\n\n  }, {\n    key: 'getChallengeTags',\n    value: function getChallengeTags() {\n      return this.private.api.get('/technologies').then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      }).then(function (res) {\n        return res.result.status === 200 ? res.result.content : new Error(res.result.content);\n      });\n    }\n\n    /**\n     * Gets challenges.\n     * @param {Object} filters Optional.\n     * @param {Object} params Optional.\n     * @return {Promise} Resolves to the api response.\n     */\n\n  }, {\n    key: 'getChallenges',\n    value: function getChallenges(filters, params) {\n      return this.private.getChallenges('/challenges/', filters, params).then(function (res) {\n        res.challenges.forEach(function (item) {\n          return normalizeChallenge(item);\n        });\n        return res;\n      });\n    }\n\n    /**\n     * Gets SRM matches.\n     * @param {Object} params\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'getSrms',\n    value: function () {\n      var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(params) {\n        var res;\n        return _regenerator2.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                _context7.next = 2;\n                return this.private.api.get('/srms/?' + _qs2.default.stringify(params));\n\n              case 2:\n                res = _context7.sent;\n                return _context7.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context7.stop();\n            }\n          }\n        }, _callee7, this);\n      }));\n\n      function getSrms(_x19) {\n        return _ref9.apply(this, arguments);\n      }\n\n      return getSrms;\n    }()\n\n    /**\n     * Gets challenges of the specified user.\n     * @param {String} userId User ID whose challenges we want to fetch.\n     * @param {String} username User whose challenges we want to fetch.\n     * @param {Object} filters Optional.\n     * @param {Number} params Optional.\n     * @return {Promise} Resolves to the api response.\n     */\n\n  }, {\n    key: 'getUserChallenges',\n    value: function getUserChallenges(userId, username, filters, params) {\n      var endpoint = '/challenges';\n      return this.private.getChallenges(endpoint, (0, _extends3.default)({}, filters, { userIds: userId }), params).then(function (res) {\n        res.challenges.forEach(function (item) {\n          return normalizeChallenge(item, username);\n        });\n        return res;\n      });\n    }\n\n    /**\n     * Gets marathon matches of the specified user.\n     * @param {String} username User whose challenges we want to fetch.\n     * @param {Object} filters Optional.\n     * @param {Number} params Optional.\n     * @return {Promise} Resolves to the api response.\n     */\n\n  }, {\n    key: 'getUserMarathonMatches',\n    value: function getUserMarathonMatches(username, filters, params) {\n      var endpoint = '/members/' + username.toLowerCase() + '/mms/';\n      return this.private.getChallenges(endpoint, filters, params);\n    }\n\n    /**\n     * Gets SRM matches related to the user.\n     * @param {String} handle\n     * @param {Object} params\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'getUserSrms',\n    value: function () {\n      var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(handle, params) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                url = '/members/' + handle + '/srms/?' + _qs2.default.stringify(params);\n                _context8.next = 3;\n                return this.private.api.get(url);\n\n              case 3:\n                res = _context8.sent;\n                return _context8.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context8.stop();\n            }\n          }\n        }, _callee8, this);\n      }));\n\n      function getUserSrms(_x20, _x21) {\n        return _ref10.apply(this, arguments);\n      }\n\n      return getUserSrms;\n    }()\n\n    /**\n     * Registers user to the specified challenge.\n     * @param {String} challengeId\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'register',\n    value: function () {\n      var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(challengeId) {\n        var endpoint, res;\n        return _regenerator2.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                endpoint = '/challenges/' + challengeId + '/register';\n                _context9.next = 3;\n                return this.private.api.postJson(endpoint);\n\n              case 3:\n                res = _context9.sent;\n\n                if (res.ok) {\n                  _context9.next = 6;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 6:\n                return _context9.abrupt('return', res.json());\n\n              case 7:\n              case 'end':\n                return _context9.stop();\n            }\n          }\n        }, _callee9, this);\n      }));\n\n      function register(_x22) {\n        return _ref11.apply(this, arguments);\n      }\n\n      return register;\n    }()\n\n    /**\n     * Unregisters user from the specified challenge.\n     * @param {String} challengeId\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'unregister',\n    value: function () {\n      var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(challengeId) {\n        var endpoint, res;\n        return _regenerator2.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                endpoint = '/challenges/' + challengeId + '/unregister';\n                _context10.next = 3;\n                return this.private.api.post(endpoint);\n\n              case 3:\n                res = _context10.sent;\n\n                if (res.ok) {\n                  _context10.next = 6;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 6:\n                return _context10.abrupt('return', res.json());\n\n              case 7:\n              case 'end':\n                return _context10.stop();\n            }\n          }\n        }, _callee10, this);\n      }));\n\n      function unregister(_x23) {\n        return _ref12.apply(this, arguments);\n      }\n\n      return unregister;\n    }()\n\n    /**\n     * Gets count of user's active challenges.\n     * @param {String} userId Topcoder user ID.\n     * @param {String} handle Topcoder user handle.\n     * @return {Action} Resolves to the api response.\n     */\n\n  }, {\n    key: 'getActiveChallengesCount',\n    value: function getActiveChallengesCount(userId, handle) {\n      var filter = { status: 'ACTIVE' };\n      var params = { limit: 1, offset: 0 };\n      return this.getUserChallenges(userId, handle, filter, params).then(function (res) {\n        return res.totalCount;\n      });\n    }\n\n    /**\n     * Submits a challenge submission.  Uses APIV2 for Development submission\n     * and APIV3 for Design submisisons.\n     * @param {Object} body\n     * @param {String} challengeId\n     * @param {String} track Either DESIGN or DEVELOP\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'submit',\n    value: function submit(body, challengeId, track, onProgress) {\n      var api = void 0;\n      var contentType = void 0;\n      var url = void 0;\n\n      if (track === 'DESIGN') {\n        api = this.private.api;\n\n        contentType = 'application/json';\n        url = '/submissions/'; // The submission info is contained entirely in the JSON body\n      } else {\n        api = this.private.apiV2;\n        // contentType = 'multipart/form-data';\n        contentType = null;\n        url = '/develop/challenges/' + challengeId + '/upload';\n      }\n\n      return api.upload(url, {\n        body: body,\n        headers: { 'Content-Type': contentType },\n        method: 'POST'\n      }, onProgress).then(function (res) {\n        var jres = JSON.parse(res);\n        // Return result for Develop submission\n        if (track === 'DEVELOP') {\n          return jres;\n        }\n        // Design Submission requires an extra \"Processing\" POST\n        var procId = jres.result.content.id;\n        return api.upload('/submissions/' + procId + '/process/', {\n          body: (0, _stringify2.default)({ param: jres.result.content }),\n          headers: { 'Content-Type': contentType },\n          method: 'POST'\n        }, onProgress).then(function (procres) {\n          return JSON.parse(procres);\n        });\n      }, function (err) {\n        _logger2.default.error('Failed to submit to the challenge #' + challengeId, err);\n        throw err;\n      });\n    }\n\n    /**\n     * Updates the challenge (saves the give challenge to the API).\n     * @param {Object} challenge\n     * @param {String} tokenV3\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'updateChallenge',\n    value: function () {\n      var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(challenge) {\n        var URL, body, res;\n        return _regenerator2.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                URL = '/challenges/' + challenge.id;\n                body = { param: challenge };\n                _context11.next = 4;\n                return this.private.api.putJson(URL, body);\n\n              case 4:\n                res = _context11.sent;\n\n                if (res.ok) {\n                  _context11.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context11.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context11.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context11.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context11.abrupt('return', res.content);\n\n              case 13:\n              case 'end':\n                return _context11.stop();\n            }\n          }\n        }, _callee11, this);\n      }));\n\n      function updateChallenge(_x24) {\n        return _ref13.apply(this, arguments);\n      }\n\n      return updateChallenge;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return ChallengesService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing challenges service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n * @return {ChallengesService} Challenges service object\n */\nfunction getService(tokenV3, tokenV2) {\n  if (!lastInstance || lastInstance.private.tokenV3 !== tokenV3 || lastInstance.tokenV2 !== tokenV2) {\n    lastInstance = new ChallengesService(tokenV3, tokenV2);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(ORDER_BY, 'ORDER_BY', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(normalizeChallengeDetails, 'normalizeChallengeDetails', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(normalizeChallenge, 'normalizeChallenge', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(checkError, 'checkError', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(ChallengesService, 'ChallengesService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/challenges.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/challenges.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/challenges.js?");
 
 /***/ }),
 
@@ -958,7 +958,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _isomorphicFetch = __webpack_require__(/*! isomorphic-fetch */ \"isomorphic-fetch\");\n\nvar _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.communities\"\n       * @desc Communities service.\n       */\n\n\n/**\n * Returns Community App URL, or throws an error if URL cannot be found in\n * config.\n */\nfunction getCommunityAppUrl() {\n  var url = _lodash2.default.get(_topcoderReactUtils.config, 'URL.COMMUNITY_APP');\n  if (!url) throw new Error('No URL.COMMUNITY_APP param found in config');\n  return url;\n}\n\n/**\n * Client-side version of the service.\n */\n\nvar Communities = function () {\n  /**\n   * Creates a new {@link module:services.communities~Communities} instance.\n   * @param {String} tokenV3\n   */\n  function Communities(tokenV3) {\n    (0, _classCallCheck3.default)(this, Communities);\n\n    this.private = { tokenV3: tokenV3 };\n  }\n\n  /**\n   * Gets the list of communities accessible to the member of specified groups.\n   * @param {String[]} userGroupIds\n   * @return {Promise} Resolves to the array of community data objects. Each of\n   *  the objects indludes only the most important data on the community.\n   */\n\n\n  (0, _createClass3.default)(Communities, [{\n    key: 'getList',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(userGroupIds) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                url = getCommunityAppUrl();\n\n                url += '/community-app-assets/api/tc-communities?';\n                url += _qs2.default.stringify({ groups: userGroupIds });\n                _context.next = 5;\n                return (0, _isomorphicFetch2.default)(url, {\n                  headers: {\n                    authorization: this.private.tokenV3\n                  }\n                });\n\n              case 5:\n                res = _context.sent;\n                return _context.abrupt('return', res.json());\n\n              case 7:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getList(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getList;\n    }()\n\n    /**\n     * Gets metadata for the specified community.\n     * @param {String} communityId\n     * @return {Promise} Resolves to the community metadata.\n     */\n\n  }, {\n    key: 'getMetadata',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(communityId) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                url = getCommunityAppUrl();\n\n                url += '/community-app-assets/api/tc-communities/' + communityId + '/meta';\n                _context2.next = 4;\n                return (0, _isomorphicFetch2.default)(url, {\n                  headers: {\n                    authorization: this.private.tokenV3\n                  }\n                });\n\n              case 4:\n                res = _context2.sent;\n                return _context2.abrupt('return', res.json());\n\n              case 6:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getMetadata(_x2) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getMetadata;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return Communities;\n}();\n\nvar lastInstance = null;\n\n/**\n * Returns a new or existing communities service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {Communities} Communties service object\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new Communities(tokenV3);\n  }\n  return lastInstance;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getCommunityAppUrl, 'getCommunityAppUrl', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/communities.js');\n  reactHotLoader.register(Communities, 'Communities', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/communities.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/communities.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/communities.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/communities.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/communities.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _isomorphicFetch = __webpack_require__(/*! isomorphic-fetch */ \"isomorphic-fetch\");\n\nvar _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch);\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.communities\"\n       * @desc Communities service.\n       */\n\n\n/**\n * Returns Community App URL, or throws an error if URL cannot be found in\n * config.\n */\nfunction getCommunityAppUrl() {\n  var url = _lodash2.default.get(_topcoderReactUtils.config, 'URL.COMMUNITY_APP');\n  if (!url) throw new Error('No URL.COMMUNITY_APP param found in config');\n  return url;\n}\n\n/**\n * Client-side version of the service.\n */\n\nvar Communities = function () {\n  /**\n   * Creates a new {@link module:services.communities~Communities} instance.\n   * @param {String} tokenV3\n   */\n  function Communities(tokenV3) {\n    (0, _classCallCheck3.default)(this, Communities);\n\n    this.private = { tokenV3: tokenV3 };\n  }\n\n  /**\n   * Gets the list of communities accessible to the member of specified groups.\n   * @param {String[]} userGroupIds\n   * @return {Promise} Resolves to the array of community data objects. Each of\n   *  the objects indludes only the most important data on the community.\n   */\n\n\n  (0, _createClass3.default)(Communities, [{\n    key: 'getList',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(userGroupIds) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                url = getCommunityAppUrl();\n\n                url += '/community-app-assets/api/tc-communities?';\n                url += _qs2.default.stringify({ groups: userGroupIds });\n                _context.next = 5;\n                return (0, _isomorphicFetch2.default)(url, {\n                  headers: {\n                    authorization: this.private.tokenV3\n                  }\n                });\n\n              case 5:\n                res = _context.sent;\n                return _context.abrupt('return', res.json());\n\n              case 7:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getList(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getList;\n    }()\n\n    /**\n     * Gets metadata for the specified community.\n     * @param {String} communityId\n     * @return {Promise} Resolves to the community metadata.\n     */\n\n  }, {\n    key: 'getMetadata',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(communityId) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                url = getCommunityAppUrl();\n\n                url += '/community-app-assets/api/tc-communities/' + communityId + '/meta';\n                _context2.next = 4;\n                return (0, _isomorphicFetch2.default)(url, {\n                  headers: {\n                    authorization: this.private.tokenV3\n                  }\n                });\n\n              case 4:\n                res = _context2.sent;\n                return _context2.abrupt('return', res.json());\n\n              case 6:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getMetadata(_x2) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getMetadata;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return Communities;\n}();\n\nvar lastInstance = null;\n\n/**\n * Returns a new or existing communities service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {Communities} Communties service object\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new Communities(tokenV3);\n  }\n  return lastInstance;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(getCommunityAppUrl, 'getCommunityAppUrl', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/communities.js');\n  reactHotLoader.register(Communities, 'Communities', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/communities.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/communities.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/communities.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/communities.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/communities.js?");
 
 /***/ }),
 
@@ -970,7 +970,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.direct\"\n       * @desc The Direct service takes care about communication with Direct APIs:\n       *  projects, billing accounts, copilots, all these stuff should be added here,\n       *  at least for now.\n       */\n\n/**\n * Direct service class.\n */\nvar Direct = function () {\n  /**\n   * Creates a new {@link module:services.direct~Direct} instance.\n   * @param {String} tokenV3 Optional. Topcoder auth token v3. Though optional,\n   *  most probably most, if not all, of the service functionality won't work\n   *  for non-authenticated visitors.\n   */\n  function Direct(tokenV3) {\n    (0, _classCallCheck3.default)(this, Direct);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets details of the specified project.\n   * @param {Number} projectId\n   * @return {Promise} Resolves to the project details object.\n   */\n\n\n  (0, _createClass3.default)(Direct, [{\n    key: 'getProjectDetails',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(projectId) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/direct/projects/' + projectId);\n\n              case 2:\n                res = _context.sent;\n\n                if (res.ok) {\n                  _context.next = 5;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 5:\n                _context.next = 7;\n                return res.json();\n\n              case 7:\n                res = _context.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context.next = 10;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 10:\n                return _context.abrupt('return', res.content);\n\n              case 11:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getProjectDetails(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getProjectDetails;\n    }()\n\n    /**\n     * Gets user permissions on the specified project.\n     * @param {Number|String} projectId\n     * @param {String} tokenV3 Auth token for API v3.\n     * @return {Promise} Resolves to the user permissions data.\n     */\n\n  }, {\n    key: 'getProjectPermissions',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(projectId) {\n        var URL, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                URL = '/direct/projects/' + projectId + '/permissions';\n                _context2.next = 3;\n                return this.private.api.get(URL);\n\n              case 3:\n                res = _context2.sent;\n\n                if (res.ok) {\n                  _context2.next = 6;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 6:\n                _context2.next = 8;\n                return res.json();\n\n              case 8:\n                res = _context2.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context2.next = 11;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 11:\n                return _context2.abrupt('return', res.content);\n\n              case 12:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getProjectPermissions(_x2) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getProjectPermissions;\n    }()\n\n    /**\n     * Gets all projects the user can see.\n     * @param {Object} query Optional. Query params for the request.\n     * @return {Promise} Resolves to an array of project objects.\n     */\n\n  }, {\n    key: 'getUserProjects',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(query) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                url = '/direct/projects/user';\n\n                if (query) url += '?' + _qs2.default.stringify(query);\n                _context3.next = 4;\n                return this.private.api.get(url);\n\n              case 4:\n                res = _context3.sent;\n\n                if (res.ok) {\n                  _context3.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context3.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context3.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context3.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context3.abrupt('return', res.content);\n\n              case 13:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function getUserProjects(_x3) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return getUserProjects;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return Direct;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing {@link module:services.direct~Direct} service.\n * @param {String} tokenV3 Optional. Topcoder auth token v3.\n * @return {Direct} Direct service object.\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || lastInstance.private.tokenV3 !== tokenV3) {\n    lastInstance = new Direct(tokenV3);\n  }\n  return lastInstance;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(Direct, 'Direct', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/direct.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/direct.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/direct.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/direct.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/direct.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.direct\"\n       * @desc The Direct service takes care about communication with Direct APIs:\n       *  projects, billing accounts, copilots, all these stuff should be added here,\n       *  at least for now.\n       */\n\n/**\n * Direct service class.\n */\nvar Direct = function () {\n  /**\n   * Creates a new {@link module:services.direct~Direct} instance.\n   * @param {String} tokenV3 Optional. Topcoder auth token v3. Though optional,\n   *  most probably most, if not all, of the service functionality won't work\n   *  for non-authenticated visitors.\n   */\n  function Direct(tokenV3) {\n    (0, _classCallCheck3.default)(this, Direct);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets details of the specified project.\n   * @param {Number} projectId\n   * @return {Promise} Resolves to the project details object.\n   */\n\n\n  (0, _createClass3.default)(Direct, [{\n    key: 'getProjectDetails',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(projectId) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/direct/projects/' + projectId);\n\n              case 2:\n                res = _context.sent;\n\n                if (res.ok) {\n                  _context.next = 5;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 5:\n                _context.next = 7;\n                return res.json();\n\n              case 7:\n                res = _context.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context.next = 10;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 10:\n                return _context.abrupt('return', res.content);\n\n              case 11:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getProjectDetails(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getProjectDetails;\n    }()\n\n    /**\n     * Gets user permissions on the specified project.\n     * @param {Number|String} projectId\n     * @param {String} tokenV3 Auth token for API v3.\n     * @return {Promise} Resolves to the user permissions data.\n     */\n\n  }, {\n    key: 'getProjectPermissions',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(projectId) {\n        var URL, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                URL = '/direct/projects/' + projectId + '/permissions';\n                _context2.next = 3;\n                return this.private.api.get(URL);\n\n              case 3:\n                res = _context2.sent;\n\n                if (res.ok) {\n                  _context2.next = 6;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 6:\n                _context2.next = 8;\n                return res.json();\n\n              case 8:\n                res = _context2.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context2.next = 11;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 11:\n                return _context2.abrupt('return', res.content);\n\n              case 12:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getProjectPermissions(_x2) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getProjectPermissions;\n    }()\n\n    /**\n     * Gets all projects the user can see.\n     * @param {Object} query Optional. Query params for the request.\n     * @return {Promise} Resolves to an array of project objects.\n     */\n\n  }, {\n    key: 'getUserProjects',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(query) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                url = '/direct/projects/user';\n\n                if (query) url += '?' + _qs2.default.stringify(query);\n                _context3.next = 4;\n                return this.private.api.get(url);\n\n              case 4:\n                res = _context3.sent;\n\n                if (res.ok) {\n                  _context3.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context3.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context3.sent.result;\n\n                if (!(res.status !== 200)) {\n                  _context3.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context3.abrupt('return', res.content);\n\n              case 13:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function getUserProjects(_x3) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return getUserProjects;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return Direct;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing {@link module:services.direct~Direct} service.\n * @param {String} tokenV3 Optional. Topcoder auth token v3.\n * @return {Direct} Direct service object.\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || lastInstance.private.tokenV3 !== tokenV3) {\n    lastInstance = new Direct(tokenV3);\n  }\n  return lastInstance;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(Direct, 'Direct', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/direct.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/direct.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/direct.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/direct.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/direct.js?");
 
 /***/ }),
 
@@ -982,7 +982,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _set = __webpack_require__(/*! babel-runtime/core-js/set */ \"babel-runtime/core-js/set\");\n\nvar _set2 = _interopRequireDefault(_set);\n\nexports.addDescendantGroups = addDescendantGroups;\nexports.checkGroupsStatus = checkGroupsStatus;\nexports.checkUserGroups = checkUserGroups;\nexports.reduceGroupIds = reduceGroupIds;\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.groups\"\n       * @desc Service for communication with group-related part of Topcoder API.\n       *\n       * NOTE: Through this file, and in related contexts, by loading a user group,\n       * or user groups data, we refer to loading the information about descendant\n       * user groups; i.e. given some user group(s) we speak about loading the sub-\n       * three of related child groups.\n       *\n       * By group maps we refer to the object having group IDs as the keys, and\n       * group data objects as the values. Any group object included into a group map\n       * has its \"subGroups\" array (if present) replaced by \"subGroupIds\", that lists\n       * only the IDs of immediate child groups; actual child group objects from\n       * \"subGroups\" are recursively added to the top level of the group map.\n       * Also each group in the group map is timestamped to keep caching of\n       * the loaded data.\n       */\n\n/* The value of USER_GROUP_MAXAGE constant converted to [ms]. */\nvar USER_GROUP_MAXAGE = _topcoderReactUtils.config.USER_GROUP_MAXAGE * 1000;\n\n/**\n * Given an array of IDs (or a single ID) of user groups, and a map of known\n * user groups, it returns the array including all specified user groups, and\n * all their known descendant groups.\n * @param {String|String[]} groupIds\n * @param {Object} knownGroups\n * @return {String[]}\n */\nfunction addDescendantGroups(groupIds, knownGroups) {\n  var res = _lodash2.default.isArray(groupIds) ? groupIds : [groupIds];\n  var visitedGroupsIds = new _set2.default();\n  var pos = 0;\n  while (pos < res.length) {\n    var id = res[pos];\n    if (!visitedGroupsIds.has(id)) {\n      visitedGroupsIds.add(id);\n      var g = knownGroups[id];\n      if (g && g.subGroupIds) res = res.concat(g.subGroupIds);\n    }\n    pos += 1;\n  }\n  return _lodash2.default.uniq(res);\n}\n\n/**\n * Splits the given list of group IDs into the lists of groups being loaded,\n * loaded, and others.\n * @param {String|String[]} groupIds ID, or an array of IDs, of the group(s) we\n *  are interested in.\n * @param {Object} knownGroups Optional. The map of already known groups (some\n *  of them may be outdated, though). This should be of the same format as the\n *  object on \"groups.groups\" path of the Redux store. Defaults to empty object.\n * @param {Object} loadingGroups Optional. Set of groups beign loaded now. This\n *  should be of the same format as the object on \"groups.loading\" path of the\n *  Redux store. Defaults to empty object.\n * @return {Object} Resulting object may hold four arrays with group IDs from\n *  \"groupIds\" (empty arrays will not be included into the result object):\n *  - \"loaded\" - the groups that are present in \"knownGroups\" and are not\n *    outdated;\n *  - \"loading\" - the groups that are not present in \"knownGroups\" (or present,\n *    but outdated); but they are already being loaded;\n *  - \"missing\" - the groups that are not present in \"knownGroups\"\n *    (or outdated), and are not being loaded.\n *  - \"unknown\" - the groups that are absent in \"knownGroups\" map.\n */\nfunction checkGroupsStatus(groupIds) {\n  var knownGroups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var loadingGroups = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  var loaded = [];\n  var loading = [];\n  var missing = [];\n  var unknown = [];\n  var now = Date.now();\n  var tested = new _set2.default();\n  var ids = _lodash2.default.isArray(groupIds) ? groupIds : [groupIds];\n  ids.forEach(function (id) {\n    if (tested.has(id)) return;\n    tested.add(id);\n    var g = knownGroups[id];\n    if (!g) unknown.push(id);\n    if (g && (now - g.timestamp || 0) < USER_GROUP_MAXAGE) loaded.push(id);else if (loadingGroups[id]) loading.push(id);else missing.push(id);\n  });\n  return {\n    loaded: loaded.length ? loaded : null,\n    loading: loading.length ? loading : null,\n    missing: missing.length ? missing : null,\n    unknown: unknown.length ? unknown : null\n  };\n}\n\n/**\n * Returns \"true\" if \"userGroups\" arrays includes any group specified by\n * \"groupIds\", or any group descendant from a group specified by \"groupIds\".\n * The is the map of known groups\n * @param {String|String[]} groupIds\n * @param {Object[]|String[]} userGroups Array of user's groups or their IDs.\n * @param {Object} knownGroups Map of known groups.\n * @return {Boolean}\n */\nfunction checkUserGroups(groupIds, userGroups, knownGroups) {\n  var queue = _lodash2.default.isArray(groupIds) ? groupIds : [groupIds];\n  if (!queue.length) return true;\n  if (!userGroups.length) return false;\n\n  /* Algorithmically, \"knownGroups\" stores, in compressed form, data on\n   * known trees of user groups; and we want to check whether any of groups\n   * from \"userGroups\" belong to sub-trees having groups from \"groupIds\" as\n   * their roots. So, we do a breadth-frist search through the group trees. */\n  var userGroupIds = new _set2.default();\n  var visitedGroupIds = new _set2.default();\n  userGroups.forEach(function (g) {\n    return userGroupIds.add(_lodash2.default.isObject(g) ? g.id : g);\n  });\n  var pos = 0;\n  while (pos < queue.length) {\n    var id = queue[pos];\n    if (userGroupIds.has(id)) return true;\n    visitedGroupIds.add(id);\n    var g = knownGroups[id];\n    if (g && g.subGroupIds) {\n      g.subGroupIds.forEach(function (sgId) {\n        return !visitedGroupIds.has(sgId) ? queue.push(sgId) : null;\n      });\n    }\n    pos += 1;\n  }\n  return false;\n}\n\n/**\n * Private. Handles given response from the groups API.\n * @param {Object} response\n * @return {Promise} On success resolves to the data fetched from the API.\n */\nfunction handleApiResponse(response) {\n  if (!response.ok) throw new Error(response.statusText);\n  return response.json().then(function (_ref) {\n    var result = _ref.result;\n\n    if (result.status !== 200) throw new Error(result.content);\n    return result.content;\n  });\n}\n\n/**\n * Private. Merges given user group (possibly a tree of user groups) into\n * groups map. This function intended only for internal use inside this module,\n * as it may mutate both arguments (hence, the corresponding ESLint rule is\n * disabled within this function), thus should be used only where it is safe.\n * For external use a similar function is provided by \"utils/tc\" module.\n * @param {Object} groups\n * @param {Object} group\n */\nfunction mergeGroup(groups, group) {\n  /* eslint-disable no-param-reassign */\n  var sg = group.subGroups;\n  group.timestamp = Date.now();\n  if (sg && sg.length) {\n    group.subGroupIds = sg.map(function (g) {\n      return g.id;\n    });\n    sg.forEach(function (g) {\n      return mergeGroup(groups, g);\n    });\n  }\n  delete group.subGroups;\n  groups[group.id] = group;\n  /* eslint-enable no-param-reassign */\n}\n\n/**\n * Given a group tree, reduces it to the array of all group IDs encountered in\n * the tree.\n * @param {Object} group\n * @return {String[]} Array of IDs.\n */\nfunction reduceGroupIds(_ref2) {\n  var id = _ref2.id,\n      subGroups = _ref2.subGroups;\n\n  var res = [id];\n  if (subGroups) {\n    subGroups.forEach(function (g) {\n      res = res.concat(reduceGroupIds(g));\n    });\n  }\n  return res;\n}\n\n/**\n * Service class.\n */\n\nvar GroupService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function GroupService(tokenV3) {\n    (0, _classCallCheck3.default)(this, GroupService);\n\n    var now = Date.now();\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      cache: {\n        groupTreeIds: {\n          lastCleanUp: now,\n          data: {}\n        }\n      },\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Adds new member to the group.\n   * @param {String} groupId\n   * @param {String} memberId\n   * @param {String} membershipType\n   * @return {Promise}\n   */\n\n\n  (0, _createClass3.default)(GroupService, [{\n    key: 'addMember',\n    value: function addMember(groupId, memberId, membershipType) {\n      return this.private.api.postJson('/groups/' + groupId + '/members', {\n        param: { memberId: memberId, membershipType: membershipType }\n      }).then(handleApiResponse);\n    }\n\n    /**\n     * Gets detailed information about the group.\n     *\n     * Notice, when \"withSubGroups\" argument is true (default) this method returns\n     * a tree of group data objects, connected via their \"subGroups\" fields.\n     * getMap(..) method below wraps this functionality in a more practical way!\n     *\n     * @param {String} groupId\n     * @param {Boolean} withSubGroups Optional. Defaults to true. Specifies,\n     *  whether the response should information about sub-groups, if any.\n     * @return {Promise} On success resolves to the group data object.\n     */\n\n  }, {\n    key: 'getGroup',\n    value: function getGroup(groupId) {\n      var withSubGroups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      var url = '/groups/' + groupId;\n      if (withSubGroups) {\n        url = url + '/getSubGroups?includeSubGroups=true&oneLevel=false';\n      }\n      return this.private.api.get(url).then(handleApiResponse);\n    }\n\n    /**\n     * Gets detailed information about the specified user group(s) and their\n     * descendant sub-groups.\n     *\n     * @param {String|String[]} groupIds Group ID, or an array of group IDs,\n     *  to query from Topcoder API.\n     * @return {Promise} Resolves to the group map. That object will have group\n     *  IDs as the keys, and corresponding group data objects as the values. In\n     *  each group data object the \"subGroups\" field, if any, will be replaced by\n     * \"subGroupIds\" (array of IDs of the immediate child groups), and the actual\n     *  data on the sub-groups will be moved to the root of the map object.\n     *  It also timestamps each fetched group.\n     */\n\n  }, {\n    key: 'getGroupMap',\n    value: function getGroupMap(groupIds) {\n      var _this = this;\n\n      var res = {};\n      var seen = new _set2.default();\n      var query = _lodash2.default.isArray(groupIds) ? groupIds : [groupIds];\n      var promises = query.map(function (id) {\n        if (seen.has(id)) return null;\n        seen.add(id);\n        return _this.getGroup(id).then(function (group) {\n          return mergeGroup(res, group);\n        }).catch(function (err) {\n          /* In case we have failed to get some of the requested groups,\n          * we just send error message to logs, and serve the result with\n          * those groups that we managed to get. Otherwise it will be to\n          * easy to break our code by minor mistakes in the group-related\n          * configuration in the API and in the App. */\n          _logger2.default.error('Failed to get user group #' + id, err);\n\n          /* Empty group with timestamp is added to the result, as we still\n          * want to cache the result, even if the result is that we cannot\n          * load this group, at least for this visitor. */\n          res[id] = { id: id, timestamp: Date.now() };\n        });\n      });\n      return _promise2.default.all(promises).then(function () {\n        return res;\n      });\n    }\n\n    /**\n     * Given a root group ID, returns an ID array that contains the root group ID,\n     * and IDs of all descendant groups in the group (sub-)tree rooted at the\n     * specified group.\n     *\n     * Results are cached inside the class instance to minimize the load on TC\n     * Group API. To take advantage of that, be sure to keep and reuse the same\n     * class instance.\n     *\n     * The reason to have such strange method and pay an extra attention to its\n     * optimization for smaller API load is that it is essential for authorization\n     * checks.\n     *\n     * @param {String} rootGroupId\n     * @param {Number} maxage Optional. Max age [ms] of records served from the\n     *  cache. Defaults to 5 minutes.\n     * @return {Promise} Resolves to ID array.\n     */\n\n  }, {\n    key: 'getGroupTreeIds',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(rootGroupId) {\n        var maxage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5 * 60 * 1000;\n        var now, cache, CLEAN_UP_INTERVAL, cached, res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                now = Date.now();\n                cache = this.private.cache.groupTreeIds;\n\n                /* Clean-up: removes stale records from the cache. */\n\n                CLEAN_UP_INTERVAL = 24 * 60 * 60 * 1000; // 1 day in ms.\n\n                if (now - cache.lastCleanUp > CLEAN_UP_INTERVAL) {\n                  _lodash2.default.forOwn(cache, function (_ref4, key) {\n                    var timestamp = _ref4.timestamp;\n\n                    if (now - timestamp > CLEAN_UP_INTERVAL) delete cache[key];\n                  });\n                  cache.lastCleanUp = now;\n                }\n\n                /* If result is found in cache, and is fresh enough, return it. */\n                cached = cache[rootGroupId];\n\n                if (!(cached && now - cached.timestamp < maxage)) {\n                  _context.next = 7;\n                  break;\n                }\n\n                return _context.abrupt('return', _lodash2.default.clone(cached.data));\n\n              case 7:\n                _context.t0 = reduceGroupIds;\n                _context.next = 10;\n                return this.getGroup(rootGroupId);\n\n              case 10:\n                _context.t1 = _context.sent;\n                res = (0, _context.t0)(_context.t1);\n\n                cache[rootGroupId] = { data: res, timestamp: now };\n                return _context.abrupt('return', _lodash2.default.clone(res));\n\n              case 14:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getGroupTreeIds(_x4) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return getGroupTreeIds;\n    }()\n\n    /**\n     * Gets group members.\n     * @param {String} groupId\n     * @return {Promise} On sucess resolves to the array of member objects,\n     *  which include user IDs, membership time, and some bookkeeping data.\n     */\n\n  }, {\n    key: 'getMembers',\n    value: function getMembers(groupId) {\n      return this.private.api.get('/groups/' + groupId + '/members').then(handleApiResponse);\n    }\n\n    /**\n     * Gets the number of members in the group.\n     * @param {Number|String} groupId ID of the group.\n     * @param {Boolean} withSubGroups Optional. When this flag is set, the count\n     *  will include members of sub-groups of the specified group.\n     * @return {Promise} Resolves to the members count.\n     */\n\n  }, {\n    key: 'getMembersCount',\n    value: function () {\n      var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(groupId, withSubGroups) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                url = '/groups/' + groupId + '/membersCount';\n\n                if (withSubGroups) url += '?includeSubGroups=true';\n                _context2.next = 4;\n                return this.private.api.get(url);\n\n              case 4:\n                res = _context2.sent;\n\n                if (res.ok) {\n                  _context2.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context2.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context2.sent.result;\n\n                if (res.success) {\n                  _context2.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context2.abrupt('return', Number(res.content));\n\n              case 13:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getMembersCount(_x6, _x7) {\n        return _ref5.apply(this, arguments);\n      }\n\n      return getMembersCount;\n    }()\n\n    /**\n     * Returns TC Auth Token V3 used by the service instance.\n     * @return {String} Token.\n     */\n\n  }, {\n    key: 'getTokenV3',\n    value: function getTokenV3() {\n      return this.private.tokenV3;\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return GroupService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing instance of challenge service, which works with\n * the specified auth token.\n * @param {String} tokenV3 Optional. Topcoder API v3 auth token.\n * @return {GroupService} Instance of the service.\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new GroupService(tokenV3);\n  }\n  return lastInstance;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(USER_GROUP_MAXAGE, 'USER_GROUP_MAXAGE', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(addDescendantGroups, 'addDescendantGroups', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(checkGroupsStatus, 'checkGroupsStatus', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(checkUserGroups, 'checkUserGroups', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(handleApiResponse, 'handleApiResponse', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(mergeGroup, 'mergeGroup', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(reduceGroupIds, 'reduceGroupIds', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(GroupService, 'GroupService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/groups.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/groups.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _set = __webpack_require__(/*! babel-runtime/core-js/set */ \"babel-runtime/core-js/set\");\n\nvar _set2 = _interopRequireDefault(_set);\n\nexports.addDescendantGroups = addDescendantGroups;\nexports.checkGroupsStatus = checkGroupsStatus;\nexports.checkUserGroups = checkUserGroups;\nexports.reduceGroupIds = reduceGroupIds;\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.groups\"\n       * @desc Service for communication with group-related part of Topcoder API.\n       *\n       * NOTE: Through this file, and in related contexts, by loading a user group,\n       * or user groups data, we refer to loading the information about descendant\n       * user groups; i.e. given some user group(s) we speak about loading the sub-\n       * three of related child groups.\n       *\n       * By group maps we refer to the object having group IDs as the keys, and\n       * group data objects as the values. Any group object included into a group map\n       * has its \"subGroups\" array (if present) replaced by \"subGroupIds\", that lists\n       * only the IDs of immediate child groups; actual child group objects from\n       * \"subGroups\" are recursively added to the top level of the group map.\n       * Also each group in the group map is timestamped to keep caching of\n       * the loaded data.\n       */\n\n/* The value of USER_GROUP_MAXAGE constant converted to [ms]. */\nvar USER_GROUP_MAXAGE = _topcoderReactUtils.config.USER_GROUP_MAXAGE * 1000;\n\n/**\n * Given an array of IDs (or a single ID) of user groups, and a map of known\n * user groups, it returns the array including all specified user groups, and\n * all their known descendant groups.\n * @param {String|String[]} groupIds\n * @param {Object} knownGroups\n * @return {String[]}\n */\nfunction addDescendantGroups(groupIds, knownGroups) {\n  var res = _lodash2.default.isArray(groupIds) ? groupIds : [groupIds];\n  var visitedGroupsIds = new _set2.default();\n  var pos = 0;\n  while (pos < res.length) {\n    var id = res[pos];\n    if (!visitedGroupsIds.has(id)) {\n      visitedGroupsIds.add(id);\n      var g = knownGroups[id];\n      if (g && g.subGroupIds) res = res.concat(g.subGroupIds);\n    }\n    pos += 1;\n  }\n  return _lodash2.default.uniq(res);\n}\n\n/**\n * Splits the given list of group IDs into the lists of groups being loaded,\n * loaded, and others.\n * @param {String|String[]} groupIds ID, or an array of IDs, of the group(s) we\n *  are interested in.\n * @param {Object} knownGroups Optional. The map of already known groups (some\n *  of them may be outdated, though). This should be of the same format as the\n *  object on \"groups.groups\" path of the Redux store. Defaults to empty object.\n * @param {Object} loadingGroups Optional. Set of groups beign loaded now. This\n *  should be of the same format as the object on \"groups.loading\" path of the\n *  Redux store. Defaults to empty object.\n * @return {Object} Resulting object may hold four arrays with group IDs from\n *  \"groupIds\" (empty arrays will not be included into the result object):\n *  - \"loaded\" - the groups that are present in \"knownGroups\" and are not\n *    outdated;\n *  - \"loading\" - the groups that are not present in \"knownGroups\" (or present,\n *    but outdated); but they are already being loaded;\n *  - \"missing\" - the groups that are not present in \"knownGroups\"\n *    (or outdated), and are not being loaded.\n *  - \"unknown\" - the groups that are absent in \"knownGroups\" map.\n */\nfunction checkGroupsStatus(groupIds) {\n  var knownGroups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var loadingGroups = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  var loaded = [];\n  var loading = [];\n  var missing = [];\n  var unknown = [];\n  var now = Date.now();\n  var tested = new _set2.default();\n  var ids = _lodash2.default.isArray(groupIds) ? groupIds : [groupIds];\n  ids.forEach(function (id) {\n    if (tested.has(id)) return;\n    tested.add(id);\n    var g = knownGroups[id];\n    if (!g) unknown.push(id);\n    if (g && (now - g.timestamp || 0) < USER_GROUP_MAXAGE) loaded.push(id);else if (loadingGroups[id]) loading.push(id);else missing.push(id);\n  });\n  return {\n    loaded: loaded.length ? loaded : null,\n    loading: loading.length ? loading : null,\n    missing: missing.length ? missing : null,\n    unknown: unknown.length ? unknown : null\n  };\n}\n\n/**\n * Returns \"true\" if \"userGroups\" arrays includes any group specified by\n * \"groupIds\", or any group descendant from a group specified by \"groupIds\".\n * The is the map of known groups\n * @param {String|String[]} groupIds\n * @param {Object[]|String[]} userGroups Array of user's groups or their IDs.\n * @param {Object} knownGroups Map of known groups.\n * @return {Boolean}\n */\nfunction checkUserGroups(groupIds, userGroups, knownGroups) {\n  var queue = _lodash2.default.isArray(groupIds) ? groupIds : [groupIds];\n  if (!queue.length) return true;\n  if (!userGroups.length) return false;\n\n  /* Algorithmically, \"knownGroups\" stores, in compressed form, data on\n   * known trees of user groups; and we want to check whether any of groups\n   * from \"userGroups\" belong to sub-trees having groups from \"groupIds\" as\n   * their roots. So, we do a breadth-frist search through the group trees. */\n  var userGroupIds = new _set2.default();\n  var visitedGroupIds = new _set2.default();\n  userGroups.forEach(function (g) {\n    return userGroupIds.add(_lodash2.default.isObject(g) ? g.id : g);\n  });\n  var pos = 0;\n  while (pos < queue.length) {\n    var id = queue[pos];\n    if (userGroupIds.has(id)) return true;\n    visitedGroupIds.add(id);\n    var g = knownGroups[id];\n    if (g && g.subGroupIds) {\n      g.subGroupIds.forEach(function (sgId) {\n        return !visitedGroupIds.has(sgId) ? queue.push(sgId) : null;\n      });\n    }\n    pos += 1;\n  }\n  return false;\n}\n\n/**\n * Private. Handles given response from the groups API.\n * @param {Object} response\n * @return {Promise} On success resolves to the data fetched from the API.\n */\nfunction handleApiResponse(response) {\n  if (!response.ok) throw new Error(response.statusText);\n  return response.json().then(function (_ref) {\n    var result = _ref.result;\n\n    if (result.status !== 200) throw new Error(result.content);\n    return result.content;\n  });\n}\n\n/**\n * Private. Merges given user group (possibly a tree of user groups) into\n * groups map. This function intended only for internal use inside this module,\n * as it may mutate both arguments (hence, the corresponding ESLint rule is\n * disabled within this function), thus should be used only where it is safe.\n * For external use a similar function is provided by \"utils/tc\" module.\n * @param {Object} groups\n * @param {Object} group\n */\nfunction mergeGroup(groups, group) {\n  /* eslint-disable no-param-reassign */\n  var sg = group.subGroups;\n  group.timestamp = Date.now();\n  if (sg && sg.length) {\n    group.subGroupIds = sg.map(function (g) {\n      return g.id;\n    });\n    sg.forEach(function (g) {\n      return mergeGroup(groups, g);\n    });\n  }\n  delete group.subGroups;\n  groups[group.id] = group;\n  /* eslint-enable no-param-reassign */\n}\n\n/**\n * Given a group tree, reduces it to the array of all group IDs encountered in\n * the tree.\n * @param {Object} group\n * @return {String[]} Array of IDs.\n */\nfunction reduceGroupIds(_ref2) {\n  var id = _ref2.id,\n      subGroups = _ref2.subGroups;\n\n  var res = [id];\n  if (subGroups) {\n    subGroups.forEach(function (g) {\n      res = res.concat(reduceGroupIds(g));\n    });\n  }\n  return res;\n}\n\n/**\n * Service class.\n */\n\nvar GroupService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function GroupService(tokenV3) {\n    (0, _classCallCheck3.default)(this, GroupService);\n\n    var now = Date.now();\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      cache: {\n        groupTreeIds: {\n          lastCleanUp: now,\n          data: {}\n        }\n      },\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Adds new member to the group.\n   * @param {String} groupId\n   * @param {String} memberId\n   * @param {String} membershipType\n   * @return {Promise}\n   */\n\n\n  (0, _createClass3.default)(GroupService, [{\n    key: 'addMember',\n    value: function addMember(groupId, memberId, membershipType) {\n      return this.private.api.postJson('/groups/' + groupId + '/members', {\n        param: { memberId: memberId, membershipType: membershipType }\n      }).then(handleApiResponse);\n    }\n\n    /**\n     * Gets detailed information about the group.\n     *\n     * Notice, when \"withSubGroups\" argument is true (default) this method returns\n     * a tree of group data objects, connected via their \"subGroups\" fields.\n     * getMap(..) method below wraps this functionality in a more practical way!\n     *\n     * @param {String} groupId\n     * @param {Boolean} withSubGroups Optional. Defaults to true. Specifies,\n     *  whether the response should information about sub-groups, if any.\n     * @return {Promise} On success resolves to the group data object.\n     */\n\n  }, {\n    key: 'getGroup',\n    value: function getGroup(groupId) {\n      var withSubGroups = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      var url = '/groups/' + groupId;\n      if (withSubGroups) {\n        url = url + '/getSubGroups?includeSubGroups=true&oneLevel=false';\n      }\n      return this.private.api.get(url).then(handleApiResponse);\n    }\n\n    /**\n     * Gets detailed information about the specified user group(s) and their\n     * descendant sub-groups.\n     *\n     * @param {String|String[]} groupIds Group ID, or an array of group IDs,\n     *  to query from Topcoder API.\n     * @return {Promise} Resolves to the group map. That object will have group\n     *  IDs as the keys, and corresponding group data objects as the values. In\n     *  each group data object the \"subGroups\" field, if any, will be replaced by\n     * \"subGroupIds\" (array of IDs of the immediate child groups), and the actual\n     *  data on the sub-groups will be moved to the root of the map object.\n     *  It also timestamps each fetched group.\n     */\n\n  }, {\n    key: 'getGroupMap',\n    value: function getGroupMap(groupIds) {\n      var _this = this;\n\n      var res = {};\n      var seen = new _set2.default();\n      var query = _lodash2.default.isArray(groupIds) ? groupIds : [groupIds];\n      var promises = query.map(function (id) {\n        if (seen.has(id)) return null;\n        seen.add(id);\n        return _this.getGroup(id).then(function (group) {\n          return mergeGroup(res, group);\n        }).catch(function (err) {\n          /* In case we have failed to get some of the requested groups,\n          * we just send error message to logs, and serve the result with\n          * those groups that we managed to get. Otherwise it will be to\n          * easy to break our code by minor mistakes in the group-related\n          * configuration in the API and in the App. */\n          _logger2.default.error('Failed to get user group #' + id, err);\n\n          /* Empty group with timestamp is added to the result, as we still\n          * want to cache the result, even if the result is that we cannot\n          * load this group, at least for this visitor. */\n          res[id] = { id: id, timestamp: Date.now() };\n        });\n      });\n      return _promise2.default.all(promises).then(function () {\n        return res;\n      });\n    }\n\n    /**\n     * Given a root group ID, returns an ID array that contains the root group ID,\n     * and IDs of all descendant groups in the group (sub-)tree rooted at the\n     * specified group.\n     *\n     * Results are cached inside the class instance to minimize the load on TC\n     * Group API. To take advantage of that, be sure to keep and reuse the same\n     * class instance.\n     *\n     * The reason to have such strange method and pay an extra attention to its\n     * optimization for smaller API load is that it is essential for authorization\n     * checks.\n     *\n     * @param {String} rootGroupId\n     * @param {Number} maxage Optional. Max age [ms] of records served from the\n     *  cache. Defaults to 5 minutes.\n     * @return {Promise} Resolves to ID array.\n     */\n\n  }, {\n    key: 'getGroupTreeIds',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(rootGroupId) {\n        var maxage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5 * 60 * 1000;\n        var now, cache, CLEAN_UP_INTERVAL, cached, res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                now = Date.now();\n                cache = this.private.cache.groupTreeIds;\n\n                /* Clean-up: removes stale records from the cache. */\n\n                CLEAN_UP_INTERVAL = 24 * 60 * 60 * 1000; // 1 day in ms.\n\n                if (now - cache.lastCleanUp > CLEAN_UP_INTERVAL) {\n                  _lodash2.default.forOwn(cache, function (_ref4, key) {\n                    var timestamp = _ref4.timestamp;\n\n                    if (now - timestamp > CLEAN_UP_INTERVAL) delete cache[key];\n                  });\n                  cache.lastCleanUp = now;\n                }\n\n                /* If result is found in cache, and is fresh enough, return it. */\n                cached = cache[rootGroupId];\n\n                if (!(cached && now - cached.timestamp < maxage)) {\n                  _context.next = 7;\n                  break;\n                }\n\n                return _context.abrupt('return', _lodash2.default.clone(cached.data));\n\n              case 7:\n                _context.t0 = reduceGroupIds;\n                _context.next = 10;\n                return this.getGroup(rootGroupId);\n\n              case 10:\n                _context.t1 = _context.sent;\n                res = (0, _context.t0)(_context.t1);\n\n                cache[rootGroupId] = { data: res, timestamp: now };\n                return _context.abrupt('return', _lodash2.default.clone(res));\n\n              case 14:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getGroupTreeIds(_x4) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return getGroupTreeIds;\n    }()\n\n    /**\n     * Gets group members.\n     * @param {String} groupId\n     * @return {Promise} On sucess resolves to the array of member objects,\n     *  which include user IDs, membership time, and some bookkeeping data.\n     */\n\n  }, {\n    key: 'getMembers',\n    value: function getMembers(groupId) {\n      return this.private.api.get('/groups/' + groupId + '/members').then(handleApiResponse);\n    }\n\n    /**\n     * Gets the number of members in the group.\n     * @param {Number|String} groupId ID of the group.\n     * @param {Boolean} withSubGroups Optional. When this flag is set, the count\n     *  will include members of sub-groups of the specified group.\n     * @return {Promise} Resolves to the members count.\n     */\n\n  }, {\n    key: 'getMembersCount',\n    value: function () {\n      var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(groupId, withSubGroups) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                url = '/groups/' + groupId + '/membersCount';\n\n                if (withSubGroups) url += '?includeSubGroups=true';\n                _context2.next = 4;\n                return this.private.api.get(url);\n\n              case 4:\n                res = _context2.sent;\n\n                if (res.ok) {\n                  _context2.next = 7;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 7:\n                _context2.next = 9;\n                return res.json();\n\n              case 9:\n                res = _context2.sent.result;\n\n                if (res.success) {\n                  _context2.next = 12;\n                  break;\n                }\n\n                throw new Error(res.content);\n\n              case 12:\n                return _context2.abrupt('return', Number(res.content));\n\n              case 13:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getMembersCount(_x6, _x7) {\n        return _ref5.apply(this, arguments);\n      }\n\n      return getMembersCount;\n    }()\n\n    /**\n     * Returns TC Auth Token V3 used by the service instance.\n     * @return {String} Token.\n     */\n\n  }, {\n    key: 'getTokenV3',\n    value: function getTokenV3() {\n      return this.private.tokenV3;\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return GroupService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing instance of challenge service, which works with\n * the specified auth token.\n * @param {String} tokenV3 Optional. Topcoder API v3 auth token.\n * @return {GroupService} Instance of the service.\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new GroupService(tokenV3);\n  }\n  return lastInstance;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(USER_GROUP_MAXAGE, 'USER_GROUP_MAXAGE', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(addDescendantGroups, 'addDescendantGroups', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(checkGroupsStatus, 'checkGroupsStatus', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(checkUserGroups, 'checkUserGroups', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(handleApiResponse, 'handleApiResponse', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(mergeGroup, 'mergeGroup', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(reduceGroupIds, 'reduceGroupIds', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(GroupService, 'GroupService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/groups.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/groups.js?");
 
 /***/ }),
 
@@ -994,7 +994,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.services = undefined;\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nvar api = _interopRequireWildcard(_api);\n\nvar _billing = __webpack_require__(/*! ./billing */ \"./src/services/billing.js\");\n\nvar billing = _interopRequireWildcard(_billing);\n\nvar _challenges = __webpack_require__(/*! ./challenges */ \"./src/services/challenges.js\");\n\nvar challenge = _interopRequireWildcard(_challenges);\n\nvar _direct = __webpack_require__(/*! ./direct */ \"./src/services/direct.js\");\n\nvar direct = _interopRequireWildcard(_direct);\n\nvar _groups = __webpack_require__(/*! ./groups */ \"./src/services/groups.js\");\n\nvar groups = _interopRequireWildcard(_groups);\n\nvar _members = __webpack_require__(/*! ./members */ \"./src/services/members.js\");\n\nvar members = _interopRequireWildcard(_members);\n\nvar _terms = __webpack_require__(/*! ./terms */ \"./src/services/terms.js\");\n\nvar terms = _interopRequireWildcard(_terms);\n\nvar _communities = __webpack_require__(/*! ./communities */ \"./src/services/communities.js\");\n\nvar communities = _interopRequireWildcard(_communities);\n\nvar _reviewOpportunities = __webpack_require__(/*! ./reviewOpportunities */ \"./src/services/reviewOpportunities.js\");\n\nvar reviewOpportunities = _interopRequireWildcard(_reviewOpportunities);\n\nvar _userSettings = __webpack_require__(/*! ./user-settings */ \"./src/services/user-settings.js\");\n\nvar userSetting = _interopRequireWildcard(_userSettings);\n\nvar _user = __webpack_require__(/*! ./user */ \"./src/services/user.js\");\n\nvar user = _interopRequireWildcard(_user);\n\nvar _lookup = __webpack_require__(/*! ./lookup */ \"./src/services/lookup.js\");\n\nvar lookup = _interopRequireWildcard(_lookup);\n\nvar _userTraits = __webpack_require__(/*! ./user-traits */ \"./src/services/user-traits.js\");\n\nvar userTraits = _interopRequireWildcard(_userTraits);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Export services.\n       */\n\n\nvar services = exports.services = {\n  api: api,\n  billing: billing,\n  terms: terms,\n  communities: communities,\n  challenge: challenge,\n  direct: direct,\n  groups: groups,\n  members: members,\n  user: user,\n  userSetting: userSetting,\n  reviewOpportunities: reviewOpportunities,\n  lookup: lookup,\n  userTraits: userTraits\n};\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(services, 'services', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/index.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/index.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/index.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.services = undefined;\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nvar api = _interopRequireWildcard(_api);\n\nvar _billing = __webpack_require__(/*! ./billing */ \"./src/services/billing.js\");\n\nvar billing = _interopRequireWildcard(_billing);\n\nvar _challenges = __webpack_require__(/*! ./challenges */ \"./src/services/challenges.js\");\n\nvar challenge = _interopRequireWildcard(_challenges);\n\nvar _direct = __webpack_require__(/*! ./direct */ \"./src/services/direct.js\");\n\nvar direct = _interopRequireWildcard(_direct);\n\nvar _groups = __webpack_require__(/*! ./groups */ \"./src/services/groups.js\");\n\nvar groups = _interopRequireWildcard(_groups);\n\nvar _members = __webpack_require__(/*! ./members */ \"./src/services/members.js\");\n\nvar members = _interopRequireWildcard(_members);\n\nvar _terms = __webpack_require__(/*! ./terms */ \"./src/services/terms.js\");\n\nvar terms = _interopRequireWildcard(_terms);\n\nvar _communities = __webpack_require__(/*! ./communities */ \"./src/services/communities.js\");\n\nvar communities = _interopRequireWildcard(_communities);\n\nvar _reviewOpportunities = __webpack_require__(/*! ./reviewOpportunities */ \"./src/services/reviewOpportunities.js\");\n\nvar reviewOpportunities = _interopRequireWildcard(_reviewOpportunities);\n\nvar _userSettings = __webpack_require__(/*! ./user-settings */ \"./src/services/user-settings.js\");\n\nvar userSetting = _interopRequireWildcard(_userSettings);\n\nvar _user = __webpack_require__(/*! ./user */ \"./src/services/user.js\");\n\nvar user = _interopRequireWildcard(_user);\n\nvar _lookup = __webpack_require__(/*! ./lookup */ \"./src/services/lookup.js\");\n\nvar lookup = _interopRequireWildcard(_lookup);\n\nvar _userTraits = __webpack_require__(/*! ./user-traits */ \"./src/services/user-traits.js\");\n\nvar userTraits = _interopRequireWildcard(_userTraits);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Export services.\n       */\n\n\nvar services = exports.services = {\n  api: api,\n  billing: billing,\n  terms: terms,\n  communities: communities,\n  challenge: challenge,\n  direct: direct,\n  groups: groups,\n  members: members,\n  user: user,\n  userSetting: userSetting,\n  reviewOpportunities: reviewOpportunities,\n  lookup: lookup,\n  userTraits: userTraits\n};\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(services, 'services', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/index.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/index.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/index.js?");
 
 /***/ }),
 
@@ -1006,7 +1006,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.looker\"\n       * @desc  This module provides a service to get look data json via Topcoder API.\n       */\n\n\n/**\n * Service class.\n */\nvar LookerService = function () {\n  /**\n   * @param {String} token Optional. Auth token for Topcoder API.\n   */\n  function LookerService(token) {\n    (0, _classCallCheck3.default)(this, LookerService);\n\n    this.private = {\n      api: (0, _api.getApi)('V4', token),\n      token: token\n    };\n  }\n\n  /**\n   * Get json look data by id.\n   * @param {String} lookerId Look id.\n   * @return {Promise} Resolves to the json data.\n   */\n\n\n  (0, _createClass3.default)(LookerService, [{\n    key: 'getLooker',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(lookerId) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/looks/' + lookerId + '/run/json');\n\n              case 2:\n                res = _context.sent;\n                return _context.abrupt('return', (0, _tc.getLookerApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getLooker(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getLooker;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return LookerService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing looker service.\n * @param {String} token Optional. Auth token for Topcoder API.\n * @return {LookerService} looker service object\n */\nfunction getService(token) {\n  if (!lastInstance || token !== lastInstance.private.token) {\n    lastInstance = new LookerService(token);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(LookerService, 'LookerService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/looker.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/looker.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/looker.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/looker.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/looker.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.looker\"\n       * @desc  This module provides a service to get look data json via Topcoder API.\n       */\n\n\n/**\n * Service class.\n */\nvar LookerService = function () {\n  /**\n   * @param {String} token Optional. Auth token for Topcoder API.\n   */\n  function LookerService(token) {\n    (0, _classCallCheck3.default)(this, LookerService);\n\n    this.private = {\n      api: (0, _api.getApi)('V4', token),\n      token: token\n    };\n  }\n\n  /**\n   * Get json look data by id.\n   * @param {String} lookerId Look id.\n   * @return {Promise} Resolves to the json data.\n   */\n\n\n  (0, _createClass3.default)(LookerService, [{\n    key: 'getLooker',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(lookerId) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/looks/' + lookerId + '/run/json');\n\n              case 2:\n                res = _context.sent;\n                return _context.abrupt('return', (0, _tc.getLookerApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getLooker(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getLooker;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return LookerService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing looker service.\n * @param {String} token Optional. Auth token for Topcoder API.\n * @return {LookerService} looker service object\n */\nfunction getService(token) {\n  if (!lastInstance || token !== lastInstance.private.token) {\n    lastInstance = new LookerService(token);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(LookerService, 'LookerService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/looker.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/looker.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/looker.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/looker.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/looker.js?");
 
 /***/ }),
 
@@ -1018,7 +1018,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.lookup\"\n       * @desc  This module provides a service to get lookup data from Topcoder\n       * via API V3.\n       */\n\n\nvar LookupService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function LookupService(tokenV3) {\n    (0, _classCallCheck3.default)(this, LookupService);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets tags.\n   * @param {Object} params Parameters\n   * @return {Promise} Resolves to the tags.\n   */\n\n\n  (0, _createClass3.default)(LookupService, [{\n    key: 'getTags',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(params) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/tags/?' + _qs2.default.stringify(params));\n\n              case 2:\n                res = _context.sent;\n                return _context.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getTags(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getTags;\n    }()\n\n    /**\n     * Gets countries.\n     * @param {Object} params Parameters\n     * @return {Promise} Resolves to the countries.\n     */\n\n  }, {\n    key: 'getCountries',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {\n        var res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return this.private.api.get('/members/lookup/countries');\n\n              case 2:\n                res = _context2.sent;\n                return _context2.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getCountries() {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getCountries;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return LookupService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing lookup service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {LookupService} Lookup service object\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new LookupService(tokenV3);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(LookupService, 'LookupService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/lookup.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/lookup.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/lookup.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/lookup.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/lookup.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.lookup\"\n       * @desc  This module provides a service to get lookup data from Topcoder\n       * via API V3.\n       */\n\n\nvar LookupService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function LookupService(tokenV3) {\n    (0, _classCallCheck3.default)(this, LookupService);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets tags.\n   * @param {Object} params Parameters\n   * @return {Promise} Resolves to the tags.\n   */\n\n\n  (0, _createClass3.default)(LookupService, [{\n    key: 'getTags',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(params) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/tags/?' + _qs2.default.stringify(params));\n\n              case 2:\n                res = _context.sent;\n                return _context.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getTags(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getTags;\n    }()\n\n    /**\n     * Gets countries.\n     * @param {Object} params Parameters\n     * @return {Promise} Resolves to the countries.\n     */\n\n  }, {\n    key: 'getCountries',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {\n        var res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return this.private.api.get('/members/lookup/countries');\n\n              case 2:\n                res = _context2.sent;\n                return _context2.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getCountries() {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getCountries;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return LookupService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing lookup service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {LookupService} Lookup service object\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new LookupService(tokenV3);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(LookupService, 'LookupService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/lookup.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/lookup.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/lookup.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/lookup.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/lookup.js?");
 
 /***/ }),
 
@@ -1030,7 +1030,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _assign = __webpack_require__(/*! babel-runtime/core-js/object/assign */ \"babel-runtime/core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.members\"\n       * @desc  This module provides a service for searching for Topcoder\n       * members via API V3.\n       */\n\n/* global XMLHttpRequest */\n\n\n/**\n * Service class.\n */\nvar MembersService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function MembersService(tokenV3) {\n    (0, _classCallCheck3.default)(this, MembersService);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets member's financial information.\n   * @param {String} handle User handle.\n   * @return {Promise} Resolves to the financial information object.\n   */\n\n\n  (0, _createClass3.default)(MembersService, [{\n    key: 'getMemberFinances',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/members/' + handle + '/financial');\n\n              case 2:\n                res = _context.sent;\n                return _context.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getMemberFinances(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getMemberFinances;\n    }()\n\n    /**\n     * Gets public information on a member.\n     *\n     * This method does not require any authorization.\n     *\n     * @param {String} handle Member handle.\n     * @return {Promise} Resolves to the data object.\n     */\n\n  }, {\n    key: 'getMemberInfo',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return this.private.api.get('/members/' + handle);\n\n              case 2:\n                res = _context2.sent;\n                return _context2.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getMemberInfo(_x2) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getMemberInfo;\n    }()\n\n    /**\n     * Gets member external account info.\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getExternalAccounts',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                _context3.next = 2;\n                return this.private.api.get('/members/' + handle + '/externalAccounts');\n\n              case 2:\n                res = _context3.sent;\n                return _context3.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function getExternalAccounts(_x3) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return getExternalAccounts;\n    }()\n\n    /**\n     * Gets member external links.\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getExternalLinks',\n    value: function () {\n      var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                _context4.next = 2;\n                return this.private.api.get('/members/' + handle + '/externalLinks');\n\n              case 2:\n                res = _context4.sent;\n                return _context4.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function getExternalLinks(_x4) {\n        return _ref4.apply(this, arguments);\n      }\n\n      return getExternalLinks;\n    }()\n\n    /**\n     * Gets member skills.\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getSkills',\n    value: function () {\n      var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                _context5.next = 2;\n                return this.private.api.get('/members/' + handle + '/skills');\n\n              case 2:\n                res = _context5.sent;\n                return _context5.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this);\n      }));\n\n      function getSkills(_x5) {\n        return _ref5.apply(this, arguments);\n      }\n\n      return getSkills;\n    }()\n\n    /**\n     * Gets member statistics.\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getStats',\n    value: function () {\n      var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                _context6.next = 2;\n                return this.private.api.get('/members/' + handle + '/stats');\n\n              case 2:\n                res = _context6.sent;\n                return _context6.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this);\n      }));\n\n      function getStats(_x6) {\n        return _ref6.apply(this, arguments);\n      }\n\n      return getStats;\n    }()\n\n    /**\n     * Gets member statistics history\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getStatsHistory',\n    value: function () {\n      var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                _context7.next = 2;\n                return this.private.api.get('/members/' + handle + '/stats/history');\n\n              case 2:\n                res = _context7.sent;\n                return _context7.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context7.stop();\n            }\n          }\n        }, _callee7, this);\n      }));\n\n      function getStatsHistory(_x7) {\n        return _ref7.apply(this, arguments);\n      }\n\n      return getStatsHistory;\n    }()\n\n    /**\n     * Gets member statistics distribution\n     * @param {String} handle\n     * @param {String} track\n     * @param {String} subTrack\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getStatsDistribution',\n    value: function () {\n      var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(handle, track, subTrack) {\n        var res;\n        return _regenerator2.default.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                _context8.next = 2;\n                return this.private.api.get('/members/stats/distribution?filter=' + encodeURIComponent(_qs2.default.stringify({\n                  track: track,\n                  subTrack: subTrack\n                })));\n\n              case 2:\n                res = _context8.sent;\n                return _context8.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context8.stop();\n            }\n          }\n        }, _callee8, this);\n      }));\n\n      function getStatsDistribution(_x8, _x9, _x10) {\n        return _ref8.apply(this, arguments);\n      }\n\n      return getStatsDistribution;\n    }()\n\n    /**\n     * Gets a list of suggested member names for the supplied partial.\n     *\n     * WARNING: This method requires v3 authorization.\n     *\n     * @param {String} keyword Partial string to find suggestions for\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'getMemberSuggestions',\n    value: function () {\n      var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(keyword) {\n        var res;\n        return _regenerator2.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                _context9.next = 2;\n                return this.private.api.get('/members/_suggest/' + keyword);\n\n              case 2:\n                res = _context9.sent;\n                return _context9.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context9.stop();\n            }\n          }\n        }, _callee9, this);\n      }));\n\n      function getMemberSuggestions(_x11) {\n        return _ref9.apply(this, arguments);\n      }\n\n      return getMemberSuggestions;\n    }()\n\n    /**\n     * Adds external web link for member.\n     * @param {String} userHandle The user handle\n     * @param {String} webLink The external web link\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'addWebLink',\n    value: function () {\n      var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(userHandle, webLink) {\n        var res;\n        return _regenerator2.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                _context10.next = 2;\n                return this.private.api.postJson('/members/' + userHandle + '/externalLinks', { param: { url: webLink } });\n\n              case 2:\n                res = _context10.sent;\n                return _context10.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context10.stop();\n            }\n          }\n        }, _callee10, this);\n      }));\n\n      function addWebLink(_x12, _x13) {\n        return _ref10.apply(this, arguments);\n      }\n\n      return addWebLink;\n    }()\n\n    /**\n     * Deletes external web link for member.\n     * @param {String} userHandle The user handle\n     * @param {String} webLinkHandle The external web link handle\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'deleteWebLink',\n    value: function () {\n      var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(userHandle, webLinkHandle) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                body = {\n                  param: {\n                    handle: webLinkHandle\n                  }\n                };\n                _context11.next = 3;\n                return this.private.api.delete('/members/' + userHandle + '/externalLinks/' + webLinkHandle, (0, _stringify2.default)(body));\n\n              case 3:\n                res = _context11.sent;\n                return _context11.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context11.stop();\n            }\n          }\n        }, _callee11, this);\n      }));\n\n      function deleteWebLink(_x14, _x15) {\n        return _ref11.apply(this, arguments);\n      }\n\n      return deleteWebLink;\n    }()\n\n    /**\n     * Adds user skill.\n     * @param {String} handle Topcoder user handle\n     * @param {Number} skillTagId Skill tag id\n     * @return {Promise} Resolves to operation result\n     */\n\n  }, {\n    key: 'addSkill',\n    value: function () {\n      var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(handle, skillTagId) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee12$(_context12) {\n          while (1) {\n            switch (_context12.prev = _context12.next) {\n              case 0:\n                body = {\n                  param: {\n                    skills: (0, _defineProperty3.default)({}, skillTagId, {\n                      hidden: false\n                    })\n                  }\n                };\n                _context12.next = 3;\n                return this.private.api.patchJson('/members/' + handle + '/skills', body);\n\n              case 3:\n                res = _context12.sent;\n                return _context12.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context12.stop();\n            }\n          }\n        }, _callee12, this);\n      }));\n\n      function addSkill(_x16, _x17) {\n        return _ref12.apply(this, arguments);\n      }\n\n      return addSkill;\n    }()\n\n    /**\n     * Hides user skill.\n     * @param {String} handle Topcoder user handle\n     * @param {Number} skillTagId Skill tag id\n     * @return {Promise} Resolves to operation result\n     */\n\n  }, {\n    key: 'hideSkill',\n    value: function () {\n      var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(handle, skillTagId) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee13$(_context13) {\n          while (1) {\n            switch (_context13.prev = _context13.next) {\n              case 0:\n                body = {\n                  param: {\n                    skills: (0, _defineProperty3.default)({}, skillTagId, {\n                      hidden: true\n                    })\n                  }\n                };\n                _context13.next = 3;\n                return this.private.api.fetch('/members/' + handle + '/skills', {\n                  body: (0, _stringify2.default)(body),\n                  method: 'PATCH'\n                });\n\n              case 3:\n                res = _context13.sent;\n                return _context13.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context13.stop();\n            }\n          }\n        }, _callee13, this);\n      }));\n\n      function hideSkill(_x18, _x19) {\n        return _ref13.apply(this, arguments);\n      }\n\n      return hideSkill;\n    }()\n\n    /**\n     * Updates member profile.\n     * @param {Object} profile The profile to update.\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'updateMemberProfile',\n    value: function () {\n      var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(profile) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee14$(_context14) {\n          while (1) {\n            switch (_context14.prev = _context14.next) {\n              case 0:\n                url = profile.verifyUrl ? '/members/' + profile.handle + '?verifyUrl=' + profile.verifyUrl : '/members/' + profile.handle;\n                _context14.next = 3;\n                return this.private.api.putJson(url, { param: profile.verifyUrl ? _lodash2.default.omit(profile, ['verifyUrl']) : profile });\n\n              case 3:\n                res = _context14.sent;\n\n                if (!(profile.verifyUrl && res.status === 409)) {\n                  _context14.next = 6;\n                  break;\n                }\n\n                return _context14.abrupt('return', _promise2.default.resolve((0, _assign2.default)({}, profile, { isEmailConflict: true })));\n\n              case 6:\n                return _context14.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 7:\n              case 'end':\n                return _context14.stop();\n            }\n          }\n        }, _callee14, this);\n      }));\n\n      function updateMemberProfile(_x20) {\n        return _ref14.apply(this, arguments);\n      }\n\n      return updateMemberProfile;\n    }()\n\n    /**\n     * Gets presigned url for member photo file.\n     * @param {String} userHandle The user handle\n     * @param {File} file The file to get its presigned url\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'getPresignedUrl',\n    value: function () {\n      var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(userHandle, file) {\n        var res, payload;\n        return _regenerator2.default.wrap(function _callee15$(_context15) {\n          while (1) {\n            switch (_context15.prev = _context15.next) {\n              case 0:\n                _context15.next = 2;\n                return this.private.api.postJson('/members/' + userHandle + '/photoUploadUrl', { param: { contentType: file.type } });\n\n              case 2:\n                res = _context15.sent;\n                _context15.next = 5;\n                return (0, _tc.getApiResponsePayload)(res);\n\n              case 5:\n                payload = _context15.sent;\n                return _context15.abrupt('return', {\n                  preSignedURL: payload.preSignedURL,\n                  token: payload.token,\n                  file: file,\n                  userHandle: userHandle\n                });\n\n              case 7:\n              case 'end':\n                return _context15.stop();\n            }\n          }\n        }, _callee15, this);\n      }));\n\n      function getPresignedUrl(_x21, _x22) {\n        return _ref15.apply(this, arguments);\n      }\n\n      return getPresignedUrl;\n    }()\n\n    /**\n     * Updates member photo.\n     * @param {Object} S3Response The response from uploadFileToS3() function.\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'updateMemberPhoto',\n    value: function () {\n      var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(S3Response) {\n        var res;\n        return _regenerator2.default.wrap(function _callee16$(_context16) {\n          while (1) {\n            switch (_context16.prev = _context16.next) {\n              case 0:\n                _context16.next = 2;\n                return this.private.api.putJson('/members/' + S3Response.userHandle + '/photo', { param: S3Response.body });\n\n              case 2:\n                res = _context16.sent;\n                return _context16.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context16.stop();\n            }\n          }\n        }, _callee16, this);\n      }));\n\n      function updateMemberPhoto(_x23) {\n        return _ref16.apply(this, arguments);\n      }\n\n      return updateMemberPhoto;\n    }()\n\n    /**\n     * Uploads file to S3.\n     * @param {Object} presignedUrlResponse The presigned url response from\n     *                                      getPresignedUrl() function.\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'uploadFileToS3',\n    value: function uploadFileToS3(presignedUrlResponse) {\n      _lodash2.default.noop(this);\n      return new _promise2.default(function (resolve, reject) {\n        var xhr = new XMLHttpRequest();\n\n        xhr.open('PUT', presignedUrlResponse.preSignedURL, true);\n        xhr.setRequestHeader('Content-Type', presignedUrlResponse.file.type);\n\n        xhr.onreadystatechange = function () {\n          var status = xhr.status;\n\n          if ((status >= 200 && status < 300 || status === 304) && xhr.readyState === 4) {\n            resolve({\n              userHandle: presignedUrlResponse.userHandle,\n              body: {\n                token: presignedUrlResponse.token,\n                contentType: presignedUrlResponse.file.type\n              }\n            });\n          } else if (status >= 400) {\n            var err = new Error('Could not upload image to S3');\n            err.status = status;\n            reject(err);\n          }\n        };\n\n        xhr.onerror = function (err) {\n          _logger2.default.error('Could not upload image to S3', err);\n\n          reject(err);\n        };\n\n        xhr.send(presignedUrlResponse.file);\n      });\n    }\n\n    /**\n     * Verify member new email\n     * @param {String} handle handle Topcoder user handle\n     * @param {String} emailVerifyToken The verify token of new email\n     * @returns {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'verifyMemberNewEmail',\n    value: function () {\n      var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(handle, emailVerifyToken) {\n        var res;\n        return _regenerator2.default.wrap(function _callee17$(_context17) {\n          while (1) {\n            switch (_context17.prev = _context17.next) {\n              case 0:\n                _context17.next = 2;\n                return this.private.api.get('/members/' + handle + '/verify?token=' + emailVerifyToken);\n\n              case 2:\n                res = _context17.sent;\n                return _context17.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context17.stop();\n            }\n          }\n        }, _callee17, this);\n      }));\n\n      function verifyMemberNewEmail(_x24, _x25) {\n        return _ref17.apply(this, arguments);\n      }\n\n      return verifyMemberNewEmail;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return MembersService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing members service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {MembersService} Members service object\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new MembersService(tokenV3);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(MembersService, 'MembersService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/members.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/members.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/members.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/members.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/members.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _assign = __webpack_require__(/*! babel-runtime/core-js/object/assign */ \"babel-runtime/core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.members\"\n       * @desc  This module provides a service for searching for Topcoder\n       * members via API V3.\n       */\n\n/* global XMLHttpRequest */\n\n\n/**\n * Service class.\n */\nvar MembersService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function MembersService(tokenV3) {\n    (0, _classCallCheck3.default)(this, MembersService);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets member's financial information.\n   * @param {String} handle User handle.\n   * @return {Promise} Resolves to the financial information object.\n   */\n\n\n  (0, _createClass3.default)(MembersService, [{\n    key: 'getMemberFinances',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/members/' + handle + '/financial');\n\n              case 2:\n                res = _context.sent;\n                return _context.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getMemberFinances(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getMemberFinances;\n    }()\n\n    /**\n     * Gets public information on a member.\n     *\n     * This method does not require any authorization.\n     *\n     * @param {String} handle Member handle.\n     * @return {Promise} Resolves to the data object.\n     */\n\n  }, {\n    key: 'getMemberInfo',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return this.private.api.get('/members/' + handle);\n\n              case 2:\n                res = _context2.sent;\n                return _context2.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getMemberInfo(_x2) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getMemberInfo;\n    }()\n\n    /**\n     * Gets member external account info.\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getExternalAccounts',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                _context3.next = 2;\n                return this.private.api.get('/members/' + handle + '/externalAccounts');\n\n              case 2:\n                res = _context3.sent;\n                return _context3.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function getExternalAccounts(_x3) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return getExternalAccounts;\n    }()\n\n    /**\n     * Gets member external links.\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getExternalLinks',\n    value: function () {\n      var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                _context4.next = 2;\n                return this.private.api.get('/members/' + handle + '/externalLinks');\n\n              case 2:\n                res = _context4.sent;\n                return _context4.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function getExternalLinks(_x4) {\n        return _ref4.apply(this, arguments);\n      }\n\n      return getExternalLinks;\n    }()\n\n    /**\n     * Gets member skills.\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getSkills',\n    value: function () {\n      var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                _context5.next = 2;\n                return this.private.api.get('/members/' + handle + '/skills');\n\n              case 2:\n                res = _context5.sent;\n                return _context5.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this);\n      }));\n\n      function getSkills(_x5) {\n        return _ref5.apply(this, arguments);\n      }\n\n      return getSkills;\n    }()\n\n    /**\n     * Gets member statistics.\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getStats',\n    value: function () {\n      var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                _context6.next = 2;\n                return this.private.api.get('/members/' + handle + '/stats');\n\n              case 2:\n                res = _context6.sent;\n                return _context6.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this);\n      }));\n\n      function getStats(_x6) {\n        return _ref6.apply(this, arguments);\n      }\n\n      return getStats;\n    }()\n\n    /**\n     * Gets member statistics history\n     * @param {String} handle\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getStatsHistory',\n    value: function () {\n      var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                _context7.next = 2;\n                return this.private.api.get('/members/' + handle + '/stats/history');\n\n              case 2:\n                res = _context7.sent;\n                return _context7.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context7.stop();\n            }\n          }\n        }, _callee7, this);\n      }));\n\n      function getStatsHistory(_x7) {\n        return _ref7.apply(this, arguments);\n      }\n\n      return getStatsHistory;\n    }()\n\n    /**\n     * Gets member statistics distribution\n     * @param {String} handle\n     * @param {String} track\n     * @param {String} subTrack\n     * @return {Promise} Resolves to the stats object.\n     */\n\n  }, {\n    key: 'getStatsDistribution',\n    value: function () {\n      var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(handle, track, subTrack) {\n        var res;\n        return _regenerator2.default.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                _context8.next = 2;\n                return this.private.api.get('/members/stats/distribution?filter=' + encodeURIComponent(_qs2.default.stringify({\n                  track: track,\n                  subTrack: subTrack\n                })));\n\n              case 2:\n                res = _context8.sent;\n                return _context8.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context8.stop();\n            }\n          }\n        }, _callee8, this);\n      }));\n\n      function getStatsDistribution(_x8, _x9, _x10) {\n        return _ref8.apply(this, arguments);\n      }\n\n      return getStatsDistribution;\n    }()\n\n    /**\n     * Gets a list of suggested member names for the supplied partial.\n     *\n     * WARNING: This method requires v3 authorization.\n     *\n     * @param {String} keyword Partial string to find suggestions for\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'getMemberSuggestions',\n    value: function () {\n      var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(keyword) {\n        var res;\n        return _regenerator2.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                _context9.next = 2;\n                return this.private.api.get('/members/_suggest/' + keyword);\n\n              case 2:\n                res = _context9.sent;\n                return _context9.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context9.stop();\n            }\n          }\n        }, _callee9, this);\n      }));\n\n      function getMemberSuggestions(_x11) {\n        return _ref9.apply(this, arguments);\n      }\n\n      return getMemberSuggestions;\n    }()\n\n    /**\n     * Adds external web link for member.\n     * @param {String} userHandle The user handle\n     * @param {String} webLink The external web link\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'addWebLink',\n    value: function () {\n      var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(userHandle, webLink) {\n        var res;\n        return _regenerator2.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                _context10.next = 2;\n                return this.private.api.postJson('/members/' + userHandle + '/externalLinks', { param: { url: webLink } });\n\n              case 2:\n                res = _context10.sent;\n                return _context10.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context10.stop();\n            }\n          }\n        }, _callee10, this);\n      }));\n\n      function addWebLink(_x12, _x13) {\n        return _ref10.apply(this, arguments);\n      }\n\n      return addWebLink;\n    }()\n\n    /**\n     * Deletes external web link for member.\n     * @param {String} userHandle The user handle\n     * @param {String} webLinkHandle The external web link handle\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'deleteWebLink',\n    value: function () {\n      var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(userHandle, webLinkHandle) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                body = {\n                  param: {\n                    handle: webLinkHandle\n                  }\n                };\n                _context11.next = 3;\n                return this.private.api.delete('/members/' + userHandle + '/externalLinks/' + webLinkHandle, (0, _stringify2.default)(body));\n\n              case 3:\n                res = _context11.sent;\n                return _context11.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context11.stop();\n            }\n          }\n        }, _callee11, this);\n      }));\n\n      function deleteWebLink(_x14, _x15) {\n        return _ref11.apply(this, arguments);\n      }\n\n      return deleteWebLink;\n    }()\n\n    /**\n     * Adds user skill.\n     * @param {String} handle Topcoder user handle\n     * @param {Number} skillTagId Skill tag id\n     * @return {Promise} Resolves to operation result\n     */\n\n  }, {\n    key: 'addSkill',\n    value: function () {\n      var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(handle, skillTagId) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee12$(_context12) {\n          while (1) {\n            switch (_context12.prev = _context12.next) {\n              case 0:\n                body = {\n                  param: {\n                    skills: (0, _defineProperty3.default)({}, skillTagId, {\n                      hidden: false\n                    })\n                  }\n                };\n                _context12.next = 3;\n                return this.private.api.patchJson('/members/' + handle + '/skills', body);\n\n              case 3:\n                res = _context12.sent;\n                return _context12.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context12.stop();\n            }\n          }\n        }, _callee12, this);\n      }));\n\n      function addSkill(_x16, _x17) {\n        return _ref12.apply(this, arguments);\n      }\n\n      return addSkill;\n    }()\n\n    /**\n     * Hides user skill.\n     * @param {String} handle Topcoder user handle\n     * @param {Number} skillTagId Skill tag id\n     * @return {Promise} Resolves to operation result\n     */\n\n  }, {\n    key: 'hideSkill',\n    value: function () {\n      var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(handle, skillTagId) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee13$(_context13) {\n          while (1) {\n            switch (_context13.prev = _context13.next) {\n              case 0:\n                body = {\n                  param: {\n                    skills: (0, _defineProperty3.default)({}, skillTagId, {\n                      hidden: true\n                    })\n                  }\n                };\n                _context13.next = 3;\n                return this.private.api.fetch('/members/' + handle + '/skills', {\n                  body: (0, _stringify2.default)(body),\n                  method: 'PATCH'\n                });\n\n              case 3:\n                res = _context13.sent;\n                return _context13.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context13.stop();\n            }\n          }\n        }, _callee13, this);\n      }));\n\n      function hideSkill(_x18, _x19) {\n        return _ref13.apply(this, arguments);\n      }\n\n      return hideSkill;\n    }()\n\n    /**\n     * Updates member profile.\n     * @param {Object} profile The profile to update.\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'updateMemberProfile',\n    value: function () {\n      var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(profile) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee14$(_context14) {\n          while (1) {\n            switch (_context14.prev = _context14.next) {\n              case 0:\n                url = profile.verifyUrl ? '/members/' + profile.handle + '?verifyUrl=' + profile.verifyUrl : '/members/' + profile.handle;\n                _context14.next = 3;\n                return this.private.api.putJson(url, { param: profile.verifyUrl ? _lodash2.default.omit(profile, ['verifyUrl']) : profile });\n\n              case 3:\n                res = _context14.sent;\n\n                if (!(profile.verifyUrl && res.status === 409)) {\n                  _context14.next = 6;\n                  break;\n                }\n\n                return _context14.abrupt('return', _promise2.default.resolve((0, _assign2.default)({}, profile, { isEmailConflict: true })));\n\n              case 6:\n                return _context14.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 7:\n              case 'end':\n                return _context14.stop();\n            }\n          }\n        }, _callee14, this);\n      }));\n\n      function updateMemberProfile(_x20) {\n        return _ref14.apply(this, arguments);\n      }\n\n      return updateMemberProfile;\n    }()\n\n    /**\n     * Gets presigned url for member photo file.\n     * @param {String} userHandle The user handle\n     * @param {File} file The file to get its presigned url\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'getPresignedUrl',\n    value: function () {\n      var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(userHandle, file) {\n        var res, payload;\n        return _regenerator2.default.wrap(function _callee15$(_context15) {\n          while (1) {\n            switch (_context15.prev = _context15.next) {\n              case 0:\n                _context15.next = 2;\n                return this.private.api.postJson('/members/' + userHandle + '/photoUploadUrl', { param: { contentType: file.type } });\n\n              case 2:\n                res = _context15.sent;\n                _context15.next = 5;\n                return (0, _tc.getApiResponsePayload)(res);\n\n              case 5:\n                payload = _context15.sent;\n                return _context15.abrupt('return', {\n                  preSignedURL: payload.preSignedURL,\n                  token: payload.token,\n                  file: file,\n                  userHandle: userHandle\n                });\n\n              case 7:\n              case 'end':\n                return _context15.stop();\n            }\n          }\n        }, _callee15, this);\n      }));\n\n      function getPresignedUrl(_x21, _x22) {\n        return _ref15.apply(this, arguments);\n      }\n\n      return getPresignedUrl;\n    }()\n\n    /**\n     * Updates member photo.\n     * @param {Object} S3Response The response from uploadFileToS3() function.\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'updateMemberPhoto',\n    value: function () {\n      var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(S3Response) {\n        var res;\n        return _regenerator2.default.wrap(function _callee16$(_context16) {\n          while (1) {\n            switch (_context16.prev = _context16.next) {\n              case 0:\n                _context16.next = 2;\n                return this.private.api.putJson('/members/' + S3Response.userHandle + '/photo', { param: S3Response.body });\n\n              case 2:\n                res = _context16.sent;\n                return _context16.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context16.stop();\n            }\n          }\n        }, _callee16, this);\n      }));\n\n      function updateMemberPhoto(_x23) {\n        return _ref16.apply(this, arguments);\n      }\n\n      return updateMemberPhoto;\n    }()\n\n    /**\n     * Uploads file to S3.\n     * @param {Object} presignedUrlResponse The presigned url response from\n     *                                      getPresignedUrl() function.\n     * @return {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'uploadFileToS3',\n    value: function uploadFileToS3(presignedUrlResponse) {\n      _lodash2.default.noop(this);\n      return new _promise2.default(function (resolve, reject) {\n        var xhr = new XMLHttpRequest();\n\n        xhr.open('PUT', presignedUrlResponse.preSignedURL, true);\n        xhr.setRequestHeader('Content-Type', presignedUrlResponse.file.type);\n\n        xhr.onreadystatechange = function () {\n          var status = xhr.status;\n\n          if ((status >= 200 && status < 300 || status === 304) && xhr.readyState === 4) {\n            resolve({\n              userHandle: presignedUrlResponse.userHandle,\n              body: {\n                token: presignedUrlResponse.token,\n                contentType: presignedUrlResponse.file.type\n              }\n            });\n          } else if (status >= 400) {\n            var err = new Error('Could not upload image to S3');\n            err.status = status;\n            reject(err);\n          }\n        };\n\n        xhr.onerror = function (err) {\n          _logger2.default.error('Could not upload image to S3', err);\n\n          reject(err);\n        };\n\n        xhr.send(presignedUrlResponse.file);\n      });\n    }\n\n    /**\n     * Verify member new email\n     * @param {String} handle handle Topcoder user handle\n     * @param {String} emailVerifyToken The verify token of new email\n     * @returns {Promise} Resolves to the api response content\n     */\n\n  }, {\n    key: 'verifyMemberNewEmail',\n    value: function () {\n      var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(handle, emailVerifyToken) {\n        var res;\n        return _regenerator2.default.wrap(function _callee17$(_context17) {\n          while (1) {\n            switch (_context17.prev = _context17.next) {\n              case 0:\n                _context17.next = 2;\n                return this.private.api.get('/members/' + handle + '/verify?token=' + emailVerifyToken);\n\n              case 2:\n                res = _context17.sent;\n                return _context17.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context17.stop();\n            }\n          }\n        }, _callee17, this);\n      }));\n\n      function verifyMemberNewEmail(_x24, _x25) {\n        return _ref17.apply(this, arguments);\n      }\n\n      return verifyMemberNewEmail;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return MembersService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing members service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {MembersService} Members service object\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new MembersService(tokenV3);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(MembersService, 'MembersService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/members.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/members.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/members.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/members.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/members.js?");
 
 /***/ }),
 
@@ -1042,7 +1042,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getReviewOpportunitiesService = getReviewOpportunitiesService;\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.reviewOpportunities\"\n       * @desc This module provides a service for retrieving Review Opportunities and\n       * submitting applications.\n       */\n\n\n/**\n * Service class.\n */\nvar ReviewOpportunitiesService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function ReviewOpportunitiesService(tokenV3) {\n    (0, _classCallCheck3.default)(this, ReviewOpportunitiesService);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets a list of currently open Review Opportunities.\n   * @param {Number} limit The max number to return in one call.\n   * @param {Number} offset Offset, used with limit to lazy load.\n   * @return {Promise} Resolves to the api response in JSON.\n   */\n\n\n  (0, _createClass3.default)(ReviewOpportunitiesService, [{\n    key: 'getReviewOpportunities',\n    value: function getReviewOpportunities(limit, offset) {\n      var endpoint = '/reviewOpportunities?limit=' + limit + '&offset=' + offset;\n      return this.private.api.get(endpoint).then(function (res) {\n        return res.ok ? res.json() : _promise2.default.reject(new Error('Error Code: ' + res.status));\n      }).then(function (res) {\n        return res.result.status === 200 ? res.result.content : _promise2.default.reject(res.result.content);\n      });\n    }\n\n    /**\n     * Gets the details of the review opportunity for the corresponding challenge\n     * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n     * @return {Promise} Resolves to the api response in JSON.\n     */\n\n  }, {\n    key: 'getDetails',\n    value: function getDetails(challengeId) {\n      var endpoint = '/reviewOpportunities/' + challengeId;\n      return this.private.api.get(endpoint).then(function (res) {\n        return res.json();\n      }).then(function (res) {\n        return res.result.status === 200 ? res.result.content : _promise2.default.reject(res.result);\n      });\n    }\n\n    /**\n     * Submits review opportunity application for the specified challenge\n     * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n     * @param {Array} roleIds List of review role IDs to apply for\n     * @return {Promise} Resolves to the api response in JSON.\n     */\n\n  }, {\n    key: 'submitApplications',\n    value: function submitApplications(challengeId, roleIds) {\n      var endpoint = '/reviewOpportunities/' + challengeId + '/applications?reviewApplicationRoleIds=' + roleIds.join(',');\n      return this.private.api.post(endpoint, {}).then(function (res) {\n        return JSON.parse(res);\n      });\n    }\n\n    /**\n     * Cancels review opportunity application for the specified challenge\n     * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n     * @param {Array} roleIds List of review role IDs to cancel applications for\n     * @return {Promise} Resolves to the api response in JSON.\n     */\n\n  }, {\n    key: 'cancelApplications',\n    value: function cancelApplications(challengeId, roleIds) {\n      var endpoint = '/reviewOpportunities/' + challengeId + '/applications?reviewApplicationRoleIds=' + roleIds.join(',');\n      return this.private.api.delete(endpoint, {}).then(function (res) {\n        return JSON.parse(res);\n      });\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return ReviewOpportunitiesService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing review opportunities service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {MembersService} Members service object\n */\nfunction getReviewOpportunitiesService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new ReviewOpportunitiesService(tokenV3);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(ReviewOpportunitiesService, 'ReviewOpportunitiesService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/reviewOpportunities.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/reviewOpportunities.js');\n  reactHotLoader.register(getReviewOpportunitiesService, 'getReviewOpportunitiesService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/reviewOpportunities.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/reviewOpportunities.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/reviewOpportunities.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getReviewOpportunitiesService = getReviewOpportunitiesService;\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.reviewOpportunities\"\n       * @desc This module provides a service for retrieving Review Opportunities and\n       * submitting applications.\n       */\n\n\n/**\n * Service class.\n */\nvar ReviewOpportunitiesService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function ReviewOpportunitiesService(tokenV3) {\n    (0, _classCallCheck3.default)(this, ReviewOpportunitiesService);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets a list of currently open Review Opportunities.\n   * @param {Number} limit The max number to return in one call.\n   * @param {Number} offset Offset, used with limit to lazy load.\n   * @return {Promise} Resolves to the api response in JSON.\n   */\n\n\n  (0, _createClass3.default)(ReviewOpportunitiesService, [{\n    key: 'getReviewOpportunities',\n    value: function getReviewOpportunities(limit, offset) {\n      var endpoint = '/reviewOpportunities?limit=' + limit + '&offset=' + offset;\n      return this.private.api.get(endpoint).then(function (res) {\n        return res.ok ? res.json() : _promise2.default.reject(new Error('Error Code: ' + res.status));\n      }).then(function (res) {\n        return res.result.status === 200 ? res.result.content : _promise2.default.reject(res.result.content);\n      });\n    }\n\n    /**\n     * Gets the details of the review opportunity for the corresponding challenge\n     * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n     * @return {Promise} Resolves to the api response in JSON.\n     */\n\n  }, {\n    key: 'getDetails',\n    value: function getDetails(challengeId) {\n      var endpoint = '/reviewOpportunities/' + challengeId;\n      return this.private.api.get(endpoint).then(function (res) {\n        return res.json();\n      }).then(function (res) {\n        return res.result.status === 200 ? res.result.content : _promise2.default.reject(res.result);\n      });\n    }\n\n    /**\n     * Submits review opportunity application for the specified challenge\n     * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n     * @param {Array} roleIds List of review role IDs to apply for\n     * @return {Promise} Resolves to the api response in JSON.\n     */\n\n  }, {\n    key: 'submitApplications',\n    value: function submitApplications(challengeId, roleIds) {\n      var endpoint = '/reviewOpportunities/' + challengeId + '/applications?reviewApplicationRoleIds=' + roleIds.join(',');\n      return this.private.api.post(endpoint, {}).then(function (res) {\n        return JSON.parse(res);\n      });\n    }\n\n    /**\n     * Cancels review opportunity application for the specified challenge\n     * @param {Number} challengeId The ID of the challenge (not the opportunity id)\n     * @param {Array} roleIds List of review role IDs to cancel applications for\n     * @return {Promise} Resolves to the api response in JSON.\n     */\n\n  }, {\n    key: 'cancelApplications',\n    value: function cancelApplications(challengeId, roleIds) {\n      var endpoint = '/reviewOpportunities/' + challengeId + '/applications?reviewApplicationRoleIds=' + roleIds.join(',');\n      return this.private.api.delete(endpoint, {}).then(function (res) {\n        return JSON.parse(res);\n      });\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return ReviewOpportunitiesService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing review opportunities service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {MembersService} Members service object\n */\nfunction getReviewOpportunitiesService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new ReviewOpportunitiesService(tokenV3);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(ReviewOpportunitiesService, 'ReviewOpportunitiesService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/reviewOpportunities.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/reviewOpportunities.js');\n  reactHotLoader.register(getReviewOpportunitiesService, 'getReviewOpportunitiesService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/reviewOpportunities.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/reviewOpportunities.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/reviewOpportunities.js?");
 
 /***/ }),
 
@@ -1054,7 +1054,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _communities = __webpack_require__(/*! ./communities */ \"./src/services/communities.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.terms\"\n       * @desc This module provides a service for convenient manipulation with\n       * Topcoder challenges' terms via TC API.\n       */\n\n/**\n * Service class.\n */\nvar TermsService = function () {\n  /**\n   * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n   */\n  function TermsService(tokenV2) {\n    (0, _classCallCheck3.default)(this, TermsService);\n\n    this.private = {\n      api: (0, _api.getApi)('V2', tokenV2),\n      tokenV2: tokenV2\n    };\n  }\n\n  /**\n   * get all terms of specified challenge\n   * @param  {Number|String} challengeId id of the challenge\n   * @return {Promise}       promise of the request result\n   */\n\n\n  (0, _createClass3.default)(TermsService, [{\n    key: 'getChallengeTerms',\n    value: function getChallengeTerms(challengeId) {\n      var _this = this;\n\n      if (this.private.tokenV2) {\n        var registered = false;\n        return this.private.api.get('/terms/' + challengeId + '?role=Submitter').then(function (res) {\n          return res.json();\n        }).then(function (res) {\n          if (res.error) {\n            if (res.error.details === 'You are already registered for this challenge.') {\n              registered = true;\n            }\n            return _this.private.api.get('/terms/' + challengeId + '?role=Submitter&noauth=true').then(function (resp) {\n              if (resp.ok) {\n                return resp.json().then(function (result) {\n                  if (registered) {\n                    // eslint-disable-next-line no-param-reassign\n                    _lodash2.default.forEach(result.terms, function (t) {\n                      t.agreed = true;\n                    });\n                  }\n                  return result;\n                });\n              }\n              return new Error(resp.statusText);\n            });\n          }\n          return res;\n        });\n      }\n      return this.private.api.get('/terms/' + challengeId + '?role=Submitter&noauth=true').then(function (resp) {\n        if (resp.ok) {\n          return resp.json();\n        }\n        throw new Error(resp.statusText);\n      });\n    }\n\n    /**\n     * get all terms for community\n     *\n     * NOTE: As there is no specific endpoint to get community terms by one call\n     *       currently we get community term ids from community service and after\n     *       we get community terms using term ids list one by one\n     *\n     * @param {String} communityId community id\n     * @param {String} tokenV3     auth token V3 - we need to get community meta data\n     *\n     * @return {Promise} resolves to the list of community terms\n     */\n\n  }, {\n    key: 'getCommunityTerms',\n    value: function getCommunityTerms(communityId, tokenV3) {\n      var _this2 = this;\n\n      var communityService = (0, _communities.getService)(tokenV3);\n\n      return communityService.getMetadata(communityId).then(function (meta) {\n        if (meta.terms && meta.terms.length) {\n          return _promise2.default.all(meta.terms.map(function (termId) {\n            return _this2.getTermDetails(termId);\n          })).then(function (terms) {\n            return terms.map(function (term) {\n              return _lodash2.default.omit(term, 'text');\n            }) // don't include text as it's big and we need it for list\n            ;\n          });\n        }\n\n        return [];\n      }).then(function (terms) {\n        return {\n          terms: terms\n        };\n      });\n    }\n\n    /**\n     * Get the terms for Review Opportunities.  This will ensure that the\n     * provided terms have all the necessary fields by getting anything missing\n     * from the terms details endpoint\n     *\n     * @param {Object} requiredTerms Required terms for review opportunity\n     *\n     * @return {Promise} resolves to the list of validated terms\n     */\n\n  }, {\n    key: 'getReviewOpportunityTerms',\n    value: function getReviewOpportunityTerms(requiredTerms) {\n      var _this3 = this;\n\n      var promises = requiredTerms.map(function (term) {\n        // Agreed field is present, all the necessary information is present for this term, but will\n        // need to verify if agreed is false as user may have agreed to terms after data was loaded\n        if (term.agreed) {\n          return _promise2.default.resolve(term);\n        }\n        // Otherwise grab new details from terms api\n        return _this3.getTermDetails(term.termsOfUseId).then(function (res) {\n          return _lodash2.default.pick(res, ['termsOfUseId', 'agreed', 'title']);\n        });\n      });\n\n      return _promise2.default.all(promises).then(function (terms) {\n        return { terms: terms };\n      });\n    }\n\n    /**\n     * get details of specified term\n     * @param  {Number|String} termId id of the term\n     * @return {Promise}       promise of the request result\n     */\n\n  }, {\n    key: 'getTermDetails',\n    value: function getTermDetails(termId) {\n      // looks like server cache responses, to prevent it we add nocache param with always new value\n      var nocache = new Date().getTime();\n      return this.private.api.get('/terms/detail/' + termId + '?nocache=' + nocache).then(function (res) {\n        return res.ok ? res.json() : _promise2.default.reject(res.json());\n      });\n    }\n\n    /**\n     * generate the url of DocuSign term\n     * @param  {Number|String} templateId id of the term's template\n     * @param  {String}        returnUrl  callback url after finishing signing\n     * @return {Promise}       promise of the request result\n     */\n\n  }, {\n    key: 'getDocuSignUrl',\n    value: function getDocuSignUrl(templateId, returnUrl) {\n      return this.private.api.post('/terms/docusign/viewURL?templateId=' + templateId + '&returnUrl=' + returnUrl).then(function (res) {\n        return res.ok ? res.json() : _promise2.default.reject(res.json());\n      });\n    }\n\n    /**\n     * Agree a term\n     * @param  {Number|String} termId id of the term\n     * @return {Promise}       promise of the request result\n     */\n\n  }, {\n    key: 'agreeTerm',\n    value: function agreeTerm(termId) {\n      return this.private.api.post('/terms/' + termId + '/agree').then(function (res) {\n        return res.ok ? res.json() : _promise2.default.reject(res.json());\n      });\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return TermsService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing terms service.\n * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n * @return {TermsService} Terms service object\n */\nfunction getService(tokenV2) {\n  /* Because of Topcoder backend restrictions, it is not straightforward to test\n   * terms-related functionality in any other way than just providing an option\n   * to run the app against mock terms service. */\n  if (_topcoderReactUtils.config.MOCK_TERMS_SERVICE) {\n    /* eslint-disable global-require */\n    return __webpack_require__(/*! ./__mocks__/terms */ \"./src/services/__mocks__/terms.js\").getService(tokenV2);\n    /* eslint-enable global-require */\n  }\n  if (!lastInstance || tokenV2 && lastInstance.private.tokenV2 !== tokenV2) {\n    lastInstance = new TermsService(tokenV2);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(TermsService, 'TermsService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/terms.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/terms.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/terms.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/terms.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/terms.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _communities = __webpack_require__(/*! ./communities */ \"./src/services/communities.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.terms\"\n       * @desc This module provides a service for convenient manipulation with\n       * Topcoder challenges' terms via TC API.\n       */\n\n/**\n * Service class.\n */\nvar TermsService = function () {\n  /**\n   * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n   */\n  function TermsService(tokenV2) {\n    (0, _classCallCheck3.default)(this, TermsService);\n\n    this.private = {\n      api: (0, _api.getApi)('V2', tokenV2),\n      tokenV2: tokenV2\n    };\n  }\n\n  /**\n   * get all terms of specified challenge\n   * @param  {Number|String} challengeId id of the challenge\n   * @return {Promise}       promise of the request result\n   */\n\n\n  (0, _createClass3.default)(TermsService, [{\n    key: 'getChallengeTerms',\n    value: function getChallengeTerms(challengeId) {\n      var _this = this;\n\n      if (this.private.tokenV2) {\n        var registered = false;\n        return this.private.api.get('/terms/' + challengeId + '?role=Submitter').then(function (res) {\n          return res.json();\n        }).then(function (res) {\n          if (res.error) {\n            if (res.error.details === 'You are already registered for this challenge.') {\n              registered = true;\n            }\n            return _this.private.api.get('/terms/' + challengeId + '?role=Submitter&noauth=true').then(function (resp) {\n              if (resp.ok) {\n                return resp.json().then(function (result) {\n                  if (registered) {\n                    // eslint-disable-next-line no-param-reassign\n                    _lodash2.default.forEach(result.terms, function (t) {\n                      t.agreed = true;\n                    });\n                  }\n                  return result;\n                });\n              }\n              return new Error(resp.statusText);\n            });\n          }\n          return res;\n        });\n      }\n      return this.private.api.get('/terms/' + challengeId + '?role=Submitter&noauth=true').then(function (resp) {\n        if (resp.ok) {\n          return resp.json();\n        }\n        throw new Error(resp.statusText);\n      });\n    }\n\n    /**\n     * get all terms for community\n     *\n     * NOTE: As there is no specific endpoint to get community terms by one call\n     *       currently we get community term ids from community service and after\n     *       we get community terms using term ids list one by one\n     *\n     * @param {String} communityId community id\n     * @param {String} tokenV3     auth token V3 - we need to get community meta data\n     *\n     * @return {Promise} resolves to the list of community terms\n     */\n\n  }, {\n    key: 'getCommunityTerms',\n    value: function getCommunityTerms(communityId, tokenV3) {\n      var _this2 = this;\n\n      var communityService = (0, _communities.getService)(tokenV3);\n\n      return communityService.getMetadata(communityId).then(function (meta) {\n        if (meta.terms && meta.terms.length) {\n          return _promise2.default.all(meta.terms.map(function (termId) {\n            return _this2.getTermDetails(termId);\n          })).then(function (terms) {\n            return terms.map(function (term) {\n              return _lodash2.default.omit(term, 'text');\n            }) // don't include text as it's big and we need it for list\n            ;\n          });\n        }\n\n        return [];\n      }).then(function (terms) {\n        return {\n          terms: terms\n        };\n      });\n    }\n\n    /**\n     * Get the terms for Review Opportunities.  This will ensure that the\n     * provided terms have all the necessary fields by getting anything missing\n     * from the terms details endpoint\n     *\n     * @param {Object} requiredTerms Required terms for review opportunity\n     *\n     * @return {Promise} resolves to the list of validated terms\n     */\n\n  }, {\n    key: 'getReviewOpportunityTerms',\n    value: function getReviewOpportunityTerms(requiredTerms) {\n      var _this3 = this;\n\n      var promises = requiredTerms.map(function (term) {\n        // Agreed field is present, all the necessary information is present for this term, but will\n        // need to verify if agreed is false as user may have agreed to terms after data was loaded\n        if (term.agreed) {\n          return _promise2.default.resolve(term);\n        }\n        // Otherwise grab new details from terms api\n        return _this3.getTermDetails(term.termsOfUseId).then(function (res) {\n          return _lodash2.default.pick(res, ['termsOfUseId', 'agreed', 'title']);\n        });\n      });\n\n      return _promise2.default.all(promises).then(function (terms) {\n        return { terms: terms };\n      });\n    }\n\n    /**\n     * get details of specified term\n     * @param  {Number|String} termId id of the term\n     * @return {Promise}       promise of the request result\n     */\n\n  }, {\n    key: 'getTermDetails',\n    value: function getTermDetails(termId) {\n      // looks like server cache responses, to prevent it we add nocache param with always new value\n      var nocache = new Date().getTime();\n      return this.private.api.get('/terms/detail/' + termId + '?nocache=' + nocache).then(function (res) {\n        return res.ok ? res.json() : _promise2.default.reject(res.json());\n      });\n    }\n\n    /**\n     * generate the url of DocuSign term\n     * @param  {Number|String} templateId id of the term's template\n     * @param  {String}        returnUrl  callback url after finishing signing\n     * @return {Promise}       promise of the request result\n     */\n\n  }, {\n    key: 'getDocuSignUrl',\n    value: function getDocuSignUrl(templateId, returnUrl) {\n      return this.private.api.post('/terms/docusign/viewURL?templateId=' + templateId + '&returnUrl=' + returnUrl).then(function (res) {\n        return res.ok ? res.json() : _promise2.default.reject(res.json());\n      });\n    }\n\n    /**\n     * Agree a term\n     * @param  {Number|String} termId id of the term\n     * @return {Promise}       promise of the request result\n     */\n\n  }, {\n    key: 'agreeTerm',\n    value: function agreeTerm(termId) {\n      return this.private.api.post('/terms/' + termId + '/agree').then(function (res) {\n        return res.ok ? res.json() : _promise2.default.reject(res.json());\n      });\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return TermsService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing terms service.\n * @param {String} tokenV2 Optional. Auth token for Topcoder API v2.\n * @return {TermsService} Terms service object\n */\nfunction getService(tokenV2) {\n  /* Because of Topcoder backend restrictions, it is not straightforward to test\n   * terms-related functionality in any other way than just providing an option\n   * to run the app against mock terms service. */\n  if (_topcoderReactUtils.config.MOCK_TERMS_SERVICE) {\n    /* eslint-disable global-require */\n    return __webpack_require__(/*! ./__mocks__/terms */ \"./src/services/__mocks__/terms.js\").getService(tokenV2);\n    /* eslint-enable global-require */\n  }\n  if (!lastInstance || tokenV2 && lastInstance.private.tokenV2 !== tokenV2) {\n    lastInstance = new TermsService(tokenV2);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(TermsService, 'TermsService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/terms.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/terms.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/terms.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/terms.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/terms.js?");
 
 /***/ }),
 
@@ -1066,7 +1066,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getUserSettingsService = getUserSettingsService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nvar _api2 = _interopRequireDefault(_api);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.user-settings\"\n       * @desc User Settings service. Corresponding part of the backend is\n       * implemented as a separate Heroku App, which is set up only for prod.\n       * Currently, we use it to save user-defined filters in the challenge search.\n       */\n\n/**\n * @static\n * @member default\n * @desc Default export is {@link module:services.user-settings~UserSettings}\n *  class.\n */\n\n/**\n * Service class.\n */\nvar UserSettings = function () {\n  /**\n   * @param {String} tokenV2\n   */\n  function UserSettings(tokenV2) {\n    (0, _classCallCheck3.default)(this, UserSettings);\n\n    this.private = {\n      api: new _api2.default(_topcoderReactUtils.config.URL.USER_SETTINGS, tokenV2),\n      token: tokenV2\n    };\n  }\n\n  /**\n   * Removes the filter specified by ID.\n   * @param {String} id\n   * @return {Promise}\n   */\n\n\n  (0, _createClass3.default)(UserSettings, [{\n    key: 'deleteFilter',\n    value: function deleteFilter(id) {\n      return this.private.api.delete('/saved-searches/' + id).then(function (res) {\n        return res.ok ? null : new Error(res.statusText);\n      });\n    }\n\n    /**\n     * Gets saved filters.\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'getFilters',\n    value: function getFilters() {\n      return this.private.api.get('/saved-searches').then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      }).then(function (res) {\n        return res.map(function (item) {\n          /* NOTE: Previous version of the challenge listing saved filter in\n           * different format (like an URL query string). This try/catch block\n           * effectively differentiate between the old (unsupported) and new\n           * format of the filters. */\n          var filter = void 0;\n          try {\n            filter = JSON.parse(item.filter);\n          } catch (e) {\n            _lodash2.default.noop();\n          }\n          return (0, _extends3.default)({}, item, { filter: filter });\n        });\n      }).then(function (res) {\n        return res.filter(function (item) {\n          return item.filter;\n        });\n      });\n    }\n\n    /**\n     * Saves filter.\n     * @param {String} name\n     * @param {Object} filter\n     */\n\n  }, {\n    key: 'saveFilter',\n    value: function saveFilter(name, filter) {\n      return this.private.api.postJson('/saved-searches', {\n        filter: (0, _stringify2.default)(filter),\n        name: name,\n        type: 'develop'\n      }).then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      });\n    }\n\n    /**\n     * Updates filter.\n     * @param {String} id\n     * @param {String} name\n     * @param {Object} filter\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'updateFilter',\n    value: function updateFilter(id, name, filter) {\n      return this.private.api.putJson('/saved-searches/' + id, {\n        filter: (0, _stringify2.default)(filter),\n        name: name,\n        type: 'develop'\n      }).then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      });\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return UserSettings;\n}();\n\nvar lastUserSettings = null;\n\n/**\n * Returns a new or existing instance of UserSettings service.\n * @param {String} tokenV2 Topcoder auth token v2.\n * @return {UserSettings}\n */\nfunction getUserSettingsService(tokenV2) {\n  if (!lastUserSettings || lastUserSettings.private.token !== tokenV2) {\n    lastUserSettings = new UserSettings(tokenV2);\n  }\n  return lastUserSettings;\n}\n\nvar _default = UserSettings;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(UserSettings, 'UserSettings', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user-settings.js');\n  reactHotLoader.register(lastUserSettings, 'lastUserSettings', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user-settings.js');\n  reactHotLoader.register(getUserSettingsService, 'getUserSettingsService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user-settings.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user-settings.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/user-settings.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getUserSettingsService = getUserSettingsService;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nvar _api2 = _interopRequireDefault(_api);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.user-settings\"\n       * @desc User Settings service. Corresponding part of the backend is\n       * implemented as a separate Heroku App, which is set up only for prod.\n       * Currently, we use it to save user-defined filters in the challenge search.\n       */\n\n/**\n * @static\n * @member default\n * @desc Default export is {@link module:services.user-settings~UserSettings}\n *  class.\n */\n\n/**\n * Service class.\n */\nvar UserSettings = function () {\n  /**\n   * @param {String} tokenV2\n   */\n  function UserSettings(tokenV2) {\n    (0, _classCallCheck3.default)(this, UserSettings);\n\n    this.private = {\n      api: new _api2.default(_topcoderReactUtils.config.URL.USER_SETTINGS, tokenV2),\n      token: tokenV2\n    };\n  }\n\n  /**\n   * Removes the filter specified by ID.\n   * @param {String} id\n   * @return {Promise}\n   */\n\n\n  (0, _createClass3.default)(UserSettings, [{\n    key: 'deleteFilter',\n    value: function deleteFilter(id) {\n      return this.private.api.delete('/saved-searches/' + id).then(function (res) {\n        return res.ok ? null : new Error(res.statusText);\n      });\n    }\n\n    /**\n     * Gets saved filters.\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'getFilters',\n    value: function getFilters() {\n      return this.private.api.get('/saved-searches').then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      }).then(function (res) {\n        return res.map(function (item) {\n          /* NOTE: Previous version of the challenge listing saved filter in\n           * different format (like an URL query string). This try/catch block\n           * effectively differentiate between the old (unsupported) and new\n           * format of the filters. */\n          var filter = void 0;\n          try {\n            filter = JSON.parse(item.filter);\n          } catch (e) {\n            _lodash2.default.noop();\n          }\n          return (0, _extends3.default)({}, item, { filter: filter });\n        });\n      }).then(function (res) {\n        return res.filter(function (item) {\n          return item.filter;\n        });\n      });\n    }\n\n    /**\n     * Saves filter.\n     * @param {String} name\n     * @param {Object} filter\n     */\n\n  }, {\n    key: 'saveFilter',\n    value: function saveFilter(name, filter) {\n      return this.private.api.postJson('/saved-searches', {\n        filter: (0, _stringify2.default)(filter),\n        name: name,\n        type: 'develop'\n      }).then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      });\n    }\n\n    /**\n     * Updates filter.\n     * @param {String} id\n     * @param {String} name\n     * @param {Object} filter\n     * @return {Promise}\n     */\n\n  }, {\n    key: 'updateFilter',\n    value: function updateFilter(id, name, filter) {\n      return this.private.api.putJson('/saved-searches/' + id, {\n        filter: (0, _stringify2.default)(filter),\n        name: name,\n        type: 'develop'\n      }).then(function (res) {\n        return res.ok ? res.json() : new Error(res.statusText);\n      });\n    }\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return UserSettings;\n}();\n\nvar lastUserSettings = null;\n\n/**\n * Returns a new or existing instance of UserSettings service.\n * @param {String} tokenV2 Topcoder auth token v2.\n * @return {UserSettings}\n */\nfunction getUserSettingsService(tokenV2) {\n  if (!lastUserSettings || lastUserSettings.private.token !== tokenV2) {\n    lastUserSettings = new UserSettings(tokenV2);\n  }\n  return lastUserSettings;\n}\n\nvar _default = UserSettings;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(UserSettings, 'UserSettings', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user-settings.js');\n  reactHotLoader.register(lastUserSettings, 'lastUserSettings', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user-settings.js');\n  reactHotLoader.register(getUserSettingsService, 'getUserSettingsService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user-settings.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user-settings.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/user-settings.js?");
 
 /***/ }),
 
@@ -1078,7 +1078,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _toCapitalCase = __webpack_require__(/*! to-capital-case */ \"to-capital-case\");\n\nvar _toCapitalCase2 = _interopRequireDefault(_toCapitalCase);\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.userTraits\"\n       * @desc  This module provides a service for user traits crud\n       * via API V3.\n       */\n\n\n/**\n * Service class.\n */\nvar UserTraitsService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function UserTraitsService(tokenV3) {\n    (0, _classCallCheck3.default)(this, UserTraitsService);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Get member's all traits.\n   * @param {String} handle User handle.\n   * @return {Promise} Resolves to the member traits.\n   */\n\n\n  (0, _createClass3.default)(UserTraitsService, [{\n    key: 'getAllUserTraits',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/members/' + handle.toLowerCase() + '/traits');\n\n              case 2:\n                res = _context.sent;\n                return _context.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getAllUserTraits(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getAllUserTraits;\n    }()\n\n    /**\n     * Add member's trait.\n     * @param {String} handle User handle.\n     * @param {String} traitId Trait Id.\n     * @param {Array} data Trait data.\n     * @return {Promise} Resolves to the member traits.\n     */\n\n  }, {\n    key: 'addUserTrait',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(handle, traitId, data) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                body = {\n                  param: [{\n                    traitId: traitId,\n                    categoryName: (0, _toCapitalCase2.default)(traitId),\n                    traits: {\n                      data: data\n                    }\n                  }]\n                };\n                _context2.next = 3;\n                return this.private.api.postJson('/members/' + handle + '/traits', body);\n\n              case 3:\n                res = _context2.sent;\n                return _context2.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function addUserTrait(_x2, _x3, _x4) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return addUserTrait;\n    }()\n\n    /**\n     * Update member's trait.\n     * @param {String} handle User handle.\n     * @param {String} traitId Trait Id.\n     * @param {Array} data Trait data.\n     * @return {Promise} Resolves to the member traits.\n     */\n\n  }, {\n    key: 'updateUserTrait',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(handle, traitId, data) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                body = {\n                  param: [{\n                    traitId: traitId,\n                    categoryName: (0, _toCapitalCase2.default)(traitId),\n                    traits: {\n                      data: data\n                    }\n                  }]\n                };\n                _context3.next = 3;\n                return this.private.api.putJson('/members/' + handle + '/traits', body);\n\n              case 3:\n                res = _context3.sent;\n                return _context3.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function updateUserTrait(_x5, _x6, _x7) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return updateUserTrait;\n    }()\n\n    /**\n     * Delete member's trait.\n     * @param {String} handle User handle.\n     * @param {String} traitId Trait Id.\n     * @return {Promise} Resolves to the member traits.\n     */\n\n  }, {\n    key: 'deleteUserTrait',\n    value: function () {\n      var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(handle, traitId) {\n        var res;\n        return _regenerator2.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                _context4.next = 2;\n                return this.private.api.delete('/members/' + handle + '/traits?traitIds=' + traitId);\n\n              case 2:\n                res = _context4.sent;\n                return _context4.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function deleteUserTrait(_x8, _x9) {\n        return _ref4.apply(this, arguments);\n      }\n\n      return deleteUserTrait;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return UserTraitsService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing user trait service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {UserTraitsService} userTraits service object\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new UserTraitsService(tokenV3);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(UserTraitsService, 'UserTraitsService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user-traits.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user-traits.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user-traits.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user-traits.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/user-traits.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nexports.getService = getService;\n\nvar _toCapitalCase = __webpack_require__(/*! to-capital-case */ \"to-capital-case\");\n\nvar _toCapitalCase2 = _interopRequireDefault(_toCapitalCase);\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.userTraits\"\n       * @desc  This module provides a service for user traits crud\n       * via API V3.\n       */\n\n\n/**\n * Service class.\n */\nvar UserTraitsService = function () {\n  /**\n   * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n   */\n  function UserTraitsService(tokenV3) {\n    (0, _classCallCheck3.default)(this, UserTraitsService);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Get member's all traits.\n   * @param {String} handle User handle.\n   * @return {Promise} Resolves to the member traits.\n   */\n\n\n  (0, _createClass3.default)(UserTraitsService, [{\n    key: 'getAllUserTraits',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(handle) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.api.get('/members/' + handle.toLowerCase() + '/traits');\n\n              case 2:\n                res = _context.sent;\n                return _context.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getAllUserTraits(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getAllUserTraits;\n    }()\n\n    /**\n     * Add member's trait.\n     * @param {String} handle User handle.\n     * @param {String} traitId Trait Id.\n     * @param {Array} data Trait data.\n     * @return {Promise} Resolves to the member traits.\n     */\n\n  }, {\n    key: 'addUserTrait',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(handle, traitId, data) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                body = {\n                  param: [{\n                    traitId: traitId,\n                    categoryName: (0, _toCapitalCase2.default)(traitId),\n                    traits: {\n                      data: data\n                    }\n                  }]\n                };\n                _context2.next = 3;\n                return this.private.api.postJson('/members/' + handle + '/traits', body);\n\n              case 3:\n                res = _context2.sent;\n                return _context2.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function addUserTrait(_x2, _x3, _x4) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return addUserTrait;\n    }()\n\n    /**\n     * Update member's trait.\n     * @param {String} handle User handle.\n     * @param {String} traitId Trait Id.\n     * @param {Array} data Trait data.\n     * @return {Promise} Resolves to the member traits.\n     */\n\n  }, {\n    key: 'updateUserTrait',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(handle, traitId, data) {\n        var body, res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                body = {\n                  param: [{\n                    traitId: traitId,\n                    categoryName: (0, _toCapitalCase2.default)(traitId),\n                    traits: {\n                      data: data\n                    }\n                  }]\n                };\n                _context3.next = 3;\n                return this.private.api.putJson('/members/' + handle + '/traits', body);\n\n              case 3:\n                res = _context3.sent;\n                return _context3.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function updateUserTrait(_x5, _x6, _x7) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return updateUserTrait;\n    }()\n\n    /**\n     * Delete member's trait.\n     * @param {String} handle User handle.\n     * @param {String} traitId Trait Id.\n     * @return {Promise} Resolves to the member traits.\n     */\n\n  }, {\n    key: 'deleteUserTrait',\n    value: function () {\n      var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(handle, traitId) {\n        var res;\n        return _regenerator2.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                _context4.next = 2;\n                return this.private.api.delete('/members/' + handle + '/traits?traitIds=' + traitId);\n\n              case 2:\n                res = _context4.sent;\n                return _context4.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function deleteUserTrait(_x8, _x9) {\n        return _ref4.apply(this, arguments);\n      }\n\n      return deleteUserTrait;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return UserTraitsService;\n}();\n\nvar lastInstance = null;\n/**\n * Returns a new or existing user trait service.\n * @param {String} tokenV3 Optional. Auth token for Topcoder API v3.\n * @return {UserTraitsService} userTraits service object\n */\nfunction getService(tokenV3) {\n  if (!lastInstance || tokenV3 !== lastInstance.private.tokenV3) {\n    lastInstance = new UserTraitsService(tokenV3);\n  }\n  return lastInstance;\n}\n\n/* Using default export would be confusing in this case. */\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(UserTraitsService, 'UserTraitsService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user-traits.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user-traits.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user-traits.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user-traits.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/user-traits.js?");
 
 /***/ }),
 
@@ -1090,7 +1090,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nexports.getService = getService;\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.user\"\n       * @desc The User service provides functionality related to Topcoder user\n       *  accounts.\n       */\n\n\nvar auth0 = void 0;\n\n/**\n * Returns a new, or cached auth0 instance.\n * @return {Object} Auth0 object.\n */\nfunction getAuth0() {\n  if (!auth0 && _topcoderReactUtils.isomorphy.isClientSide()) {\n    var Auth0 = __webpack_require__(/*! auth0-js */ \"./node_modules/auth0-js/index.js\"); /* eslint-disable-line global-require */\n    auth0 = new Auth0({\n      domain: _topcoderReactUtils.config.AUTH0.DOMAIN,\n      clientID: _topcoderReactUtils.config.AUTH0.CLIENT_ID,\n      callbackOnLocationHash: true,\n      sso: false\n    });\n  }\n  return auth0;\n}\n\n/**\n * Gets social user data.\n * @param {Object} profile The user social profile\n * @param {*} accessToken The access token\n * @returns {Object} Social user data\n */\nfunction getSocialUserData(profile, accessToken) {\n  var socialProvider = profile.identities[0].connection;\n  var firstName = '';\n  var lastName = '';\n  var handle = '';\n  var email = profile.email || '';\n\n  var socialUserId = profile.user_id.substring(profile.user_id.lastIndexOf('|') + 1);\n  var splitName = void 0;\n\n  if (socialProvider === 'google-oauth2') {\n    firstName = profile.given_name;\n    lastName = profile.family_name;\n    handle = profile.nickname;\n  } else if (socialProvider === 'facebook') {\n    firstName = profile.given_name;\n    lastName = profile.family_name;\n    handle = firstName + '.' + lastName;\n  } else if (socialProvider === 'twitter') {\n    splitName = profile.name.split(' ');\n    var _splitName = splitName;\n\n    var _splitName2 = (0, _slicedToArray3.default)(_splitName, 1);\n\n    firstName = _splitName2[0];\n\n    if (splitName.length > 1) {\n      var _splitName3 = splitName;\n\n      var _splitName4 = (0, _slicedToArray3.default)(_splitName3, 2);\n\n      lastName = _splitName4[1];\n    }\n    handle = profile.screen_name;\n  } else if (socialProvider === 'github') {\n    splitName = profile.name.split(' ');\n    var _splitName5 = splitName;\n\n    var _splitName6 = (0, _slicedToArray3.default)(_splitName5, 1);\n\n    firstName = _splitName6[0];\n\n    if (splitName.length > 1) {\n      var _splitName7 = splitName;\n\n      var _splitName8 = (0, _slicedToArray3.default)(_splitName7, 2);\n\n      lastName = _splitName8[1];\n    }\n    handle = profile.nickname;\n  } else if (socialProvider === 'bitbucket') {\n    firstName = profile.first_name;\n    lastName = profile.last_name;\n    handle = profile.username;\n  } else if (socialProvider === 'stackoverflow') {\n    firstName = profile.first_name;\n    lastName = profile.last_name;\n    handle = socialUserId;\n  } else if (socialProvider === 'dribbble') {\n    firstName = profile.first_name;\n    lastName = profile.last_name;\n    handle = socialUserId;\n  }\n\n  var token = accessToken;\n  var tokenSecret = null;\n  if (profile.identities[0].access_token) {\n    token = profile.identities[0].access_token;\n  }\n  if (profile.identities[0].access_token_secret) {\n    tokenSecret = profile.identities[0].access_token_secret;\n  }\n  return {\n    socialUserId: socialUserId,\n    username: handle,\n    firstname: firstName,\n    lastname: lastName,\n    email: email,\n    socialProfile: profile,\n    socialProvider: socialProvider,\n    accessToken: token,\n    accessTokenSecret: tokenSecret\n  };\n}\n\n/**\n * Service class.\n */\n\nvar User = function () {\n  /**\n   * Creates a new User service.\n   * @param {String} tokenV3 Topcoder auth tokenV3.\n   * @param {String} tokenV2 TC auth token v2.\n   */\n  function User(tokenV3, tokenV2) {\n    (0, _classCallCheck3.default)(this, User);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      apiV2: (0, _api.getApi)('V2', tokenV2),\n      apiV5: (0, _api.getApi)('V5', tokenV3),\n      tokenV2: tokenV2,\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets user achievements. Does not need auth.\n   * @param {String} username\n   * @return {Object}\n   */\n\n\n  (0, _createClass3.default)(User, [{\n    key: 'getAchievements',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(username) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.apiV2.get('/users/' + username);\n\n              case 2:\n                res = _context.sent;\n\n                if (res.ok) {\n                  _context.next = 5;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 5:\n                _context.next = 7;\n                return res.json();\n\n              case 7:\n                _context.t0 = _context.sent.Achievements;\n\n                if (_context.t0) {\n                  _context.next = 10;\n                  break;\n                }\n\n                _context.t0 = [];\n\n              case 10:\n                return _context.abrupt('return', _context.t0);\n\n              case 11:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getAchievements(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getAchievements;\n    }()\n\n    /**\n     * Gets public user info. Does not need auth.\n     * @param {String} username\n     * @return {Object}\n     */\n\n  }, {\n    key: 'getUserPublic',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(username) {\n        var res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return this.private.apiV2.get('/users/' + username);\n\n              case 2:\n                res = _context2.sent;\n\n                if (res.ok) {\n                  _context2.next = 5;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 5:\n                return _context2.abrupt('return', res.json() || null);\n\n              case 6:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getUserPublic(_x2) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getUserPublic;\n    }()\n\n    /**\n     * Gets public user info from v3 API. Does not need auth.\n     * @param {String} username\n     * @return {Object}\n     */\n\n  }, {\n    key: 'getUserPublicV3',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(username) {\n        var res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                _context3.next = 2;\n                return this.private.api.get('/members/' + username);\n\n              case 2:\n                res = _context3.sent;\n                return _context3.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function getUserPublicV3(_x3) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return getUserPublicV3;\n    }()\n\n    /**\n     * Gets user data object for the specified username.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {String} username\n     * @return {Promise} Resolves to the user data object.\n     */\n\n  }, {\n    key: 'getUser',\n    value: function () {\n      var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(username) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                url = '/users?filter=handle%3D' + username;\n                _context4.next = 3;\n                return this.private.api.get(url);\n\n              case 3:\n                res = _context4.sent;\n                _context4.next = 6;\n                return (0, _tc.getApiResponsePayload)(res);\n\n              case 6:\n                return _context4.abrupt('return', _context4.sent[0]);\n\n              case 7:\n              case 'end':\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function getUser(_x4) {\n        return _ref4.apply(this, arguments);\n      }\n\n      return getUser;\n    }()\n\n    /**\n     * Gets email preferences.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Number} userId The TopCoder user id\n     * @returns {Promise} Resolves to the email preferences result\n     */\n\n  }, {\n    key: 'getEmailPreferences',\n    value: function () {\n      var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(userId) {\n        var url, res, x;\n        return _regenerator2.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                url = '/users/' + userId + '/preferences';\n                _context5.next = 3;\n                return this.private.apiV5.get(url);\n\n              case 3:\n                res = _context5.sent;\n                _context5.next = 6;\n                return res.json();\n\n              case 6:\n                x = _context5.sent;\n                return _context5.abrupt('return', x.email);\n\n              case 8:\n              case 'end':\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this);\n      }));\n\n      function getEmailPreferences(_x5) {\n        return _ref5.apply(this, arguments);\n      }\n\n      return getEmailPreferences;\n    }()\n\n    /**\n     * Saves email preferences.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Object} user The TopCoder user\n     * @param {Object} preferences The email preferences\n     * @returns {Promise} Resolves to the email preferences result\n     */\n\n  }, {\n    key: 'saveEmailPreferences',\n    value: function () {\n      var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(_ref7, preferences) {\n        var firstName = _ref7.firstName,\n            lastName = _ref7.lastName,\n            userId = _ref7.userId;\n        var settings, url, res;\n        return _regenerator2.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                settings = {\n                  firstName: firstName,\n                  lastName: lastName,\n                  createdBy: String(userId),\n                  updatedBy: String(userId),\n                  subscriptions: preferences\n                };\n                url = '/users/' + userId + '/preferences';\n                _context6.next = 4;\n                return this.private.apiV5.putJson(url, { email: settings, objectId: String(userId) });\n\n              case 4:\n                res = _context6.sent;\n                return _context6.abrupt('return', res);\n\n              case 6:\n              case 'end':\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this);\n      }));\n\n      function saveEmailPreferences(_x6, _x7) {\n        return _ref6.apply(this, arguments);\n      }\n\n      return saveEmailPreferences;\n    }()\n\n    /**\n     * Gets credential for the specified user id.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Number} userId The user id\n     * @return {Promise} Resolves to the linked accounts array.\n     */\n\n  }, {\n    key: 'getCredential',\n    value: function () {\n      var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(userId) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                url = '/users/' + userId + '?fields=credential';\n                _context7.next = 3;\n                return this.private.api.get(url);\n\n              case 3:\n                res = _context7.sent;\n                return _context7.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context7.stop();\n            }\n          }\n        }, _callee7, this);\n      }));\n\n      function getCredential(_x8) {\n        return _ref8.apply(this, arguments);\n      }\n\n      return getCredential;\n    }()\n\n    /**\n     * Updates user password.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Number} userId The user id\n     * @param {String} newPassword The new password\n     * @param {String} oldPassword The old password\n     * @return {Promise} Resolves to the update result.\n     */\n\n  }, {\n    key: 'updatePassword',\n    value: function () {\n      var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(userId, newPassword, oldPassword) {\n        var credential, url, res;\n        return _regenerator2.default.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                credential = {\n                  password: newPassword,\n                  currentPassword: oldPassword\n                };\n                url = '/users/' + userId;\n                _context8.next = 4;\n                return this.private.api.patchJson(url, { param: { credential: credential } });\n\n              case 4:\n                res = _context8.sent;\n                return _context8.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 6:\n              case 'end':\n                return _context8.stop();\n            }\n          }\n        }, _callee8, this);\n      }));\n\n      function updatePassword(_x9, _x10, _x11) {\n        return _ref9.apply(this, arguments);\n      }\n\n      return updatePassword;\n    }()\n\n    /**\n     * Gets linked accounts for the specified user id.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Number} userId The user id\n     * @return {Promise} Resolves to the linked accounts array.\n     */\n\n  }, {\n    key: 'getLinkedAccounts',\n    value: function () {\n      var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(userId) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                url = '/users/' + userId + '?fields=profiles';\n                _context9.next = 3;\n                return this.private.api.get(url);\n\n              case 3:\n                res = _context9.sent;\n                return _context9.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context9.stop();\n            }\n          }\n        }, _callee9, this);\n      }));\n\n      function getLinkedAccounts(_x12) {\n        return _ref10.apply(this, arguments);\n      }\n\n      return getLinkedAccounts;\n    }()\n\n    /**\n     * Unlinks external account.\n     * @param {Number} userId The TopCoder user id\n     * @param {String} provider The external account service provider\n     * @returns {Promise} Resolves to the unlink result\n     */\n\n  }, {\n    key: 'unlinkExternalAccount',\n    value: function () {\n      var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(userId, provider) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                url = '/users/' + userId + '/profiles/' + provider;\n                _context10.next = 3;\n                return this.private.api.delete(url);\n\n              case 3:\n                res = _context10.sent;\n                return _context10.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context10.stop();\n            }\n          }\n        }, _callee10, this);\n      }));\n\n      function unlinkExternalAccount(_x13, _x14) {\n        return _ref11.apply(this, arguments);\n      }\n\n      return unlinkExternalAccount;\n    }()\n\n    /**\n     * Links external account.\n     * @param {Number} userId The TopCoder user id\n     * @param {String} provider The external account service provider\n     * @param {String} callbackUrl Optional. The callback url\n     * @returns {Promise} Resolves to the linked account result\n     */\n\n  }, {\n    key: 'linkExternalAccount',\n    value: function () {\n      var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(userId, provider, callbackUrl) {\n        var _this = this;\n\n        return _regenerator2.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                return _context11.abrupt('return', new _promise2.default(function (resolve, reject) {\n                  getAuth0().signin({\n                    popup: true,\n                    connection: provider,\n                    scope: 'openid profile offline_access',\n                    state: callbackUrl\n                  }, function (authError, profile, idToken, accessToken) {\n                    if (authError) {\n                      _logger2.default.error('Error signing in - onSocialLoginFailure', authError);\n                      reject(authError);\n                      return;\n                    }\n\n                    var socialData = getSocialUserData(profile, accessToken);\n\n                    var postData = {\n                      userId: socialData.socialUserId,\n                      name: socialData.username,\n                      email: socialData.email,\n                      emailVerified: false,\n                      providerType: socialData.socialProvider,\n                      context: {\n                        handle: socialData.username,\n                        accessToken: socialData.accessToken,\n                        auth0UserId: profile.user_id\n                      }\n                    };\n                    if (socialData.accessTokenSecret) {\n                      postData.context.accessTokenSecret = socialData.accessTokenSecret;\n                    }\n                    _logger2.default.debug('link API postdata: ' + (0, _stringify2.default)(postData));\n                    _this.private.api.postJson('/users/' + userId + '/profiles', { param: postData }).then(function (resp) {\n                      return (0, _tc.getApiResponsePayload)(resp).then(function (result) {\n                        _logger2.default.debug('Succesfully linked account: ' + (0, _stringify2.default)(result));\n                        resolve(postData);\n                      });\n                    }).catch(function (err) {\n                      _logger2.default.error('Error linking account', err);\n                      reject(err);\n                    });\n                  });\n                }));\n\n              case 1:\n              case 'end':\n                return _context11.stop();\n            }\n          }\n        }, _callee11, this);\n      }));\n\n      function linkExternalAccount(_x15, _x16, _x17) {\n        return _ref12.apply(this, arguments);\n      }\n\n      return linkExternalAccount;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return User;\n}();\n\nvar lastInstance = null;\n\n/**\n * Returns a new or existing User service for the specified tokenV3.\n * @param {String} tokenV3 Optional. Topcoder auth token v3.\n * @param {String} tokenV2 Optional. TC auth token v2.\n * @return {Api} API v3 service object.\n */\nfunction getService(tokenV3, tokenV2) {\n  if (!lastInstance || lastInstance.private.tokenV2 !== tokenV2 || lastInstance.private.tokenV3 !== tokenV3) {\n    lastInstance = new User(tokenV3, tokenV2);\n  }\n  return lastInstance;\n}\n\n/**\n * @static\n * @member default\n * @desc Default export is {@link module:services.user~User} class.\n */\nvar _default = User;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(auth0, 'auth0', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(getAuth0, 'getAuth0', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(getSocialUserData, 'getSocialUserData', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(User, 'User', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(getService, 'getService', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/services/user.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/user.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\nvar _classCallCheck2 = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"babel-runtime/helpers/classCallCheck\");\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _createClass2 = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"babel-runtime/helpers/createClass\");\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _slicedToArray2 = __webpack_require__(/*! babel-runtime/helpers/slicedToArray */ \"babel-runtime/helpers/slicedToArray\");\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nexports.getService = getService;\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _logger = __webpack_require__(/*! ../utils/logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _tc = __webpack_require__(/*! ../utils/tc */ \"./src/utils/tc.js\");\n\nvar _api = __webpack_require__(/*! ./api */ \"./src/services/api.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"services.user\"\n       * @desc The User service provides functionality related to Topcoder user\n       *  accounts.\n       */\n\n\nvar auth0 = void 0;\n\n/**\n * Returns a new, or cached auth0 instance.\n * @return {Object} Auth0 object.\n */\nfunction getAuth0() {\n  if (!auth0 && _topcoderReactUtils.isomorphy.isClientSide()) {\n    var Auth0 = __webpack_require__(/*! auth0-js */ \"./node_modules/auth0-js/index.js\"); /* eslint-disable-line global-require */\n    auth0 = new Auth0({\n      domain: _topcoderReactUtils.config.AUTH0.DOMAIN,\n      clientID: _topcoderReactUtils.config.AUTH0.CLIENT_ID,\n      callbackOnLocationHash: true,\n      sso: false\n    });\n  }\n  return auth0;\n}\n\n/**\n * Gets social user data.\n * @param {Object} profile The user social profile\n * @param {*} accessToken The access token\n * @returns {Object} Social user data\n */\nfunction getSocialUserData(profile, accessToken) {\n  var socialProvider = profile.identities[0].connection;\n  var firstName = '';\n  var lastName = '';\n  var handle = '';\n  var email = profile.email || '';\n\n  var socialUserId = profile.user_id.substring(profile.user_id.lastIndexOf('|') + 1);\n  var splitName = void 0;\n\n  if (socialProvider === 'google-oauth2') {\n    firstName = profile.given_name;\n    lastName = profile.family_name;\n    handle = profile.nickname;\n  } else if (socialProvider === 'facebook') {\n    firstName = profile.given_name;\n    lastName = profile.family_name;\n    handle = firstName + '.' + lastName;\n  } else if (socialProvider === 'twitter') {\n    splitName = profile.name.split(' ');\n    var _splitName = splitName;\n\n    var _splitName2 = (0, _slicedToArray3.default)(_splitName, 1);\n\n    firstName = _splitName2[0];\n\n    if (splitName.length > 1) {\n      var _splitName3 = splitName;\n\n      var _splitName4 = (0, _slicedToArray3.default)(_splitName3, 2);\n\n      lastName = _splitName4[1];\n    }\n    handle = profile.screen_name;\n  } else if (socialProvider === 'github') {\n    splitName = profile.name.split(' ');\n    var _splitName5 = splitName;\n\n    var _splitName6 = (0, _slicedToArray3.default)(_splitName5, 1);\n\n    firstName = _splitName6[0];\n\n    if (splitName.length > 1) {\n      var _splitName7 = splitName;\n\n      var _splitName8 = (0, _slicedToArray3.default)(_splitName7, 2);\n\n      lastName = _splitName8[1];\n    }\n    handle = profile.nickname;\n  } else if (socialProvider === 'bitbucket') {\n    firstName = profile.first_name;\n    lastName = profile.last_name;\n    handle = profile.username;\n  } else if (socialProvider === 'stackoverflow') {\n    firstName = profile.first_name;\n    lastName = profile.last_name;\n    handle = socialUserId;\n  } else if (socialProvider === 'dribbble') {\n    firstName = profile.first_name;\n    lastName = profile.last_name;\n    handle = socialUserId;\n  }\n\n  var token = accessToken;\n  var tokenSecret = null;\n  if (profile.identities[0].access_token) {\n    token = profile.identities[0].access_token;\n  }\n  if (profile.identities[0].access_token_secret) {\n    tokenSecret = profile.identities[0].access_token_secret;\n  }\n  return {\n    socialUserId: socialUserId,\n    username: handle,\n    firstname: firstName,\n    lastname: lastName,\n    email: email,\n    socialProfile: profile,\n    socialProvider: socialProvider,\n    accessToken: token,\n    accessTokenSecret: tokenSecret\n  };\n}\n\n/**\n * Service class.\n */\n\nvar User = function () {\n  /**\n   * Creates a new User service.\n   * @param {String} tokenV3 Topcoder auth tokenV3.\n   * @param {String} tokenV2 TC auth token v2.\n   */\n  function User(tokenV3, tokenV2) {\n    (0, _classCallCheck3.default)(this, User);\n\n    this.private = {\n      api: (0, _api.getApi)('V3', tokenV3),\n      apiV2: (0, _api.getApi)('V2', tokenV2),\n      apiV5: (0, _api.getApi)('V5', tokenV3),\n      tokenV2: tokenV2,\n      tokenV3: tokenV3\n    };\n  }\n\n  /**\n   * Gets user achievements. Does not need auth.\n   * @param {String} username\n   * @return {Object}\n   */\n\n\n  (0, _createClass3.default)(User, [{\n    key: 'getAchievements',\n    value: function () {\n      var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(username) {\n        var res;\n        return _regenerator2.default.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return this.private.apiV2.get('/users/' + username);\n\n              case 2:\n                res = _context.sent;\n\n                if (res.ok) {\n                  _context.next = 5;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 5:\n                _context.next = 7;\n                return res.json();\n\n              case 7:\n                _context.t0 = _context.sent.Achievements;\n\n                if (_context.t0) {\n                  _context.next = 10;\n                  break;\n                }\n\n                _context.t0 = [];\n\n              case 10:\n                return _context.abrupt('return', _context.t0);\n\n              case 11:\n              case 'end':\n                return _context.stop();\n            }\n          }\n        }, _callee, this);\n      }));\n\n      function getAchievements(_x) {\n        return _ref.apply(this, arguments);\n      }\n\n      return getAchievements;\n    }()\n\n    /**\n     * Gets public user info. Does not need auth.\n     * @param {String} username\n     * @return {Object}\n     */\n\n  }, {\n    key: 'getUserPublic',\n    value: function () {\n      var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(username) {\n        var res;\n        return _regenerator2.default.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return this.private.apiV2.get('/users/' + username);\n\n              case 2:\n                res = _context2.sent;\n\n                if (res.ok) {\n                  _context2.next = 5;\n                  break;\n                }\n\n                throw new Error(res.statusText);\n\n              case 5:\n                return _context2.abrupt('return', res.json() || null);\n\n              case 6:\n              case 'end':\n                return _context2.stop();\n            }\n          }\n        }, _callee2, this);\n      }));\n\n      function getUserPublic(_x2) {\n        return _ref2.apply(this, arguments);\n      }\n\n      return getUserPublic;\n    }()\n\n    /**\n     * Gets public user info from v3 API. Does not need auth.\n     * @param {String} username\n     * @return {Object}\n     */\n\n  }, {\n    key: 'getUserPublicV3',\n    value: function () {\n      var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(username) {\n        var res;\n        return _regenerator2.default.wrap(function _callee3$(_context3) {\n          while (1) {\n            switch (_context3.prev = _context3.next) {\n              case 0:\n                _context3.next = 2;\n                return this.private.api.get('/members/' + username);\n\n              case 2:\n                res = _context3.sent;\n                return _context3.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 4:\n              case 'end':\n                return _context3.stop();\n            }\n          }\n        }, _callee3, this);\n      }));\n\n      function getUserPublicV3(_x3) {\n        return _ref3.apply(this, arguments);\n      }\n\n      return getUserPublicV3;\n    }()\n\n    /**\n     * Gets user data object for the specified username.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {String} username\n     * @return {Promise} Resolves to the user data object.\n     */\n\n  }, {\n    key: 'getUser',\n    value: function () {\n      var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(username) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee4$(_context4) {\n          while (1) {\n            switch (_context4.prev = _context4.next) {\n              case 0:\n                url = '/users?filter=handle%3D' + username;\n                _context4.next = 3;\n                return this.private.api.get(url);\n\n              case 3:\n                res = _context4.sent;\n                _context4.next = 6;\n                return (0, _tc.getApiResponsePayload)(res);\n\n              case 6:\n                return _context4.abrupt('return', _context4.sent[0]);\n\n              case 7:\n              case 'end':\n                return _context4.stop();\n            }\n          }\n        }, _callee4, this);\n      }));\n\n      function getUser(_x4) {\n        return _ref4.apply(this, arguments);\n      }\n\n      return getUser;\n    }()\n\n    /**\n     * Gets email preferences.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Number} userId The TopCoder user id\n     * @returns {Promise} Resolves to the email preferences result\n     */\n\n  }, {\n    key: 'getEmailPreferences',\n    value: function () {\n      var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(userId) {\n        var url, res, x;\n        return _regenerator2.default.wrap(function _callee5$(_context5) {\n          while (1) {\n            switch (_context5.prev = _context5.next) {\n              case 0:\n                url = '/users/' + userId + '/preferences';\n                _context5.next = 3;\n                return this.private.apiV5.get(url);\n\n              case 3:\n                res = _context5.sent;\n                _context5.next = 6;\n                return res.json();\n\n              case 6:\n                x = _context5.sent;\n                return _context5.abrupt('return', x.email);\n\n              case 8:\n              case 'end':\n                return _context5.stop();\n            }\n          }\n        }, _callee5, this);\n      }));\n\n      function getEmailPreferences(_x5) {\n        return _ref5.apply(this, arguments);\n      }\n\n      return getEmailPreferences;\n    }()\n\n    /**\n     * Saves email preferences.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Object} user The TopCoder user\n     * @param {Object} preferences The email preferences\n     * @returns {Promise} Resolves to the email preferences result\n     */\n\n  }, {\n    key: 'saveEmailPreferences',\n    value: function () {\n      var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(_ref7, preferences) {\n        var firstName = _ref7.firstName,\n            lastName = _ref7.lastName,\n            userId = _ref7.userId;\n        var settings, url, res;\n        return _regenerator2.default.wrap(function _callee6$(_context6) {\n          while (1) {\n            switch (_context6.prev = _context6.next) {\n              case 0:\n                settings = {\n                  firstName: firstName,\n                  lastName: lastName,\n                  createdBy: String(userId),\n                  updatedBy: String(userId),\n                  subscriptions: preferences\n                };\n                url = '/users/' + userId + '/preferences';\n                _context6.next = 4;\n                return this.private.apiV5.putJson(url, { email: settings, objectId: String(userId) });\n\n              case 4:\n                res = _context6.sent;\n                return _context6.abrupt('return', res);\n\n              case 6:\n              case 'end':\n                return _context6.stop();\n            }\n          }\n        }, _callee6, this);\n      }));\n\n      function saveEmailPreferences(_x6, _x7) {\n        return _ref6.apply(this, arguments);\n      }\n\n      return saveEmailPreferences;\n    }()\n\n    /**\n     * Gets credential for the specified user id.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Number} userId The user id\n     * @return {Promise} Resolves to the linked accounts array.\n     */\n\n  }, {\n    key: 'getCredential',\n    value: function () {\n      var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(userId) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee7$(_context7) {\n          while (1) {\n            switch (_context7.prev = _context7.next) {\n              case 0:\n                url = '/users/' + userId + '?fields=credential';\n                _context7.next = 3;\n                return this.private.api.get(url);\n\n              case 3:\n                res = _context7.sent;\n                return _context7.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context7.stop();\n            }\n          }\n        }, _callee7, this);\n      }));\n\n      function getCredential(_x8) {\n        return _ref8.apply(this, arguments);\n      }\n\n      return getCredential;\n    }()\n\n    /**\n     * Updates user password.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Number} userId The user id\n     * @param {String} newPassword The new password\n     * @param {String} oldPassword The old password\n     * @return {Promise} Resolves to the update result.\n     */\n\n  }, {\n    key: 'updatePassword',\n    value: function () {\n      var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(userId, newPassword, oldPassword) {\n        var credential, url, res;\n        return _regenerator2.default.wrap(function _callee8$(_context8) {\n          while (1) {\n            switch (_context8.prev = _context8.next) {\n              case 0:\n                credential = {\n                  password: newPassword,\n                  currentPassword: oldPassword\n                };\n                url = '/users/' + userId;\n                _context8.next = 4;\n                return this.private.api.patchJson(url, { param: { credential: credential } });\n\n              case 4:\n                res = _context8.sent;\n                return _context8.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 6:\n              case 'end':\n                return _context8.stop();\n            }\n          }\n        }, _callee8, this);\n      }));\n\n      function updatePassword(_x9, _x10, _x11) {\n        return _ref9.apply(this, arguments);\n      }\n\n      return updatePassword;\n    }()\n\n    /**\n     * Gets linked accounts for the specified user id.\n     *\n     * NOTE: Only admins are authorized to use the underlying endpoint.\n     *\n     * @param {Number} userId The user id\n     * @return {Promise} Resolves to the linked accounts array.\n     */\n\n  }, {\n    key: 'getLinkedAccounts',\n    value: function () {\n      var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(userId) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee9$(_context9) {\n          while (1) {\n            switch (_context9.prev = _context9.next) {\n              case 0:\n                url = '/users/' + userId + '?fields=profiles';\n                _context9.next = 3;\n                return this.private.api.get(url);\n\n              case 3:\n                res = _context9.sent;\n                return _context9.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context9.stop();\n            }\n          }\n        }, _callee9, this);\n      }));\n\n      function getLinkedAccounts(_x12) {\n        return _ref10.apply(this, arguments);\n      }\n\n      return getLinkedAccounts;\n    }()\n\n    /**\n     * Unlinks external account.\n     * @param {Number} userId The TopCoder user id\n     * @param {String} provider The external account service provider\n     * @returns {Promise} Resolves to the unlink result\n     */\n\n  }, {\n    key: 'unlinkExternalAccount',\n    value: function () {\n      var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(userId, provider) {\n        var url, res;\n        return _regenerator2.default.wrap(function _callee10$(_context10) {\n          while (1) {\n            switch (_context10.prev = _context10.next) {\n              case 0:\n                url = '/users/' + userId + '/profiles/' + provider;\n                _context10.next = 3;\n                return this.private.api.delete(url);\n\n              case 3:\n                res = _context10.sent;\n                return _context10.abrupt('return', (0, _tc.getApiResponsePayload)(res));\n\n              case 5:\n              case 'end':\n                return _context10.stop();\n            }\n          }\n        }, _callee10, this);\n      }));\n\n      function unlinkExternalAccount(_x13, _x14) {\n        return _ref11.apply(this, arguments);\n      }\n\n      return unlinkExternalAccount;\n    }()\n\n    /**\n     * Links external account.\n     * @param {Number} userId The TopCoder user id\n     * @param {String} provider The external account service provider\n     * @param {String} callbackUrl Optional. The callback url\n     * @returns {Promise} Resolves to the linked account result\n     */\n\n  }, {\n    key: 'linkExternalAccount',\n    value: function () {\n      var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(userId, provider, callbackUrl) {\n        var _this = this;\n\n        return _regenerator2.default.wrap(function _callee11$(_context11) {\n          while (1) {\n            switch (_context11.prev = _context11.next) {\n              case 0:\n                return _context11.abrupt('return', new _promise2.default(function (resolve, reject) {\n                  getAuth0().signin({\n                    popup: true,\n                    connection: provider,\n                    scope: 'openid profile offline_access',\n                    state: callbackUrl\n                  }, function (authError, profile, idToken, accessToken) {\n                    if (authError) {\n                      _logger2.default.error('Error signing in - onSocialLoginFailure', authError);\n                      reject(authError);\n                      return;\n                    }\n\n                    var socialData = getSocialUserData(profile, accessToken);\n\n                    var postData = {\n                      userId: socialData.socialUserId,\n                      name: socialData.username,\n                      email: socialData.email,\n                      emailVerified: false,\n                      providerType: socialData.socialProvider,\n                      context: {\n                        handle: socialData.username,\n                        accessToken: socialData.accessToken,\n                        auth0UserId: profile.user_id\n                      }\n                    };\n                    if (socialData.accessTokenSecret) {\n                      postData.context.accessTokenSecret = socialData.accessTokenSecret;\n                    }\n                    _logger2.default.debug('link API postdata: ' + (0, _stringify2.default)(postData));\n                    _this.private.api.postJson('/users/' + userId + '/profiles', { param: postData }).then(function (resp) {\n                      return (0, _tc.getApiResponsePayload)(resp).then(function (result) {\n                        _logger2.default.debug('Succesfully linked account: ' + (0, _stringify2.default)(result));\n                        resolve(postData);\n                      });\n                    }).catch(function (err) {\n                      _logger2.default.error('Error linking account', err);\n                      reject(err);\n                    });\n                  });\n                }));\n\n              case 1:\n              case 'end':\n                return _context11.stop();\n            }\n          }\n        }, _callee11, this);\n      }));\n\n      function linkExternalAccount(_x15, _x16, _x17) {\n        return _ref12.apply(this, arguments);\n      }\n\n      return linkExternalAccount;\n    }()\n  }, {\n    key: '__reactstandin__regenerateByEval',\n    // @ts-ignore\n    value: function __reactstandin__regenerateByEval(key, code) {\n      // @ts-ignore\n      this[key] = eval(code);\n    }\n  }]);\n  return User;\n}();\n\nvar lastInstance = null;\n\n/**\n * Returns a new or existing User service for the specified tokenV3.\n * @param {String} tokenV3 Optional. Topcoder auth token v3.\n * @param {String} tokenV2 Optional. TC auth token v2.\n * @return {Api} API v3 service object.\n */\nfunction getService(tokenV3, tokenV2) {\n  if (!lastInstance || lastInstance.private.tokenV2 !== tokenV2 || lastInstance.private.tokenV3 !== tokenV3) {\n    lastInstance = new User(tokenV3, tokenV2);\n  }\n  return lastInstance;\n}\n\n/**\n * @static\n * @member default\n * @desc Default export is {@link module:services.user~User} class.\n */\nvar _default = User;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(auth0, 'auth0', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(getAuth0, 'getAuth0', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(getSocialUserData, 'getSocialUserData', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(User, 'User', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(lastInstance, 'lastInstance', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(getService, 'getService', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/services/user.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/services/user.js?");
 
 /***/ }),
 
@@ -1102,7 +1102,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isReviewOpportunitiesBucket = exports.BUCKET_DATA = exports.BUCKETS = undefined;\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _BUCKET_DATA; /**\n                   * Standard challenge buckets\n                   */\n\nexports.getBuckets = getBuckets;\nexports.registerBucket = registerBucket;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _sort = __webpack_require__(/*! ./sort */ \"./src/utils/challenge/sort.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\nvar BUCKETS = exports.BUCKETS = {\n  ALL: 'all',\n  MY: 'my',\n  OPEN_FOR_REGISTRATION: 'openForRegistration',\n  ONGOING: 'ongoing',\n  PAST: 'past',\n  SAVED_FILTER: 'saved-filter',\n  UPCOMING: 'upcoming',\n  REVIEW_OPPORTUNITIES: 'reviewOpportunities',\n  SAVED_REVIEW_OPPORTUNITIES_FILTER: 'savedReviewOpportunitiesFilter'\n};\n\nvar BUCKET_DATA = exports.BUCKET_DATA = (_BUCKET_DATA = {}, (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.ALL, {\n  filter: {\n    started: true,\n    status: ['ACTIVE']\n  },\n  hideCount: false,\n  name: 'All Challenges',\n  sorts: []\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.MY, {\n  filter: {\n    started: true,\n    status: ['ACTIVE']\n  },\n  hideCount: false,\n  name: 'My Challenges',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.TIME_TO_SUBMIT, _sort.SORTS.NUM_REGISTRANTS, _sort.SORTS.NUM_SUBMISSIONS, _sort.SORTS.PRIZE_HIGH_TO_LOW, _sort.SORTS.TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.OPEN_FOR_REGISTRATION, {\n  filter: {\n    registrationOpen: true,\n    started: true,\n    status: ['ACTIVE']\n  },\n  hideCount: false,\n  name: 'Open for registration',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.TIME_TO_REGISTER, _sort.SORTS.TIME_TO_SUBMIT, _sort.SORTS.NUM_REGISTRANTS, _sort.SORTS.NUM_SUBMISSIONS, _sort.SORTS.PRIZE_HIGH_TO_LOW, _sort.SORTS.TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.ONGOING, {\n  filter: {\n    registrationOpen: false,\n    started: true,\n    status: ['ACTIVE']\n  },\n  hideCount: false,\n  name: 'Ongoing challenges',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.CURRENT_PHASE, _sort.SORTS.TITLE_A_TO_Z, _sort.SORTS.PRIZE_HIGH_TO_LOW]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.UPCOMING, {\n  filter: {\n    upcoming: true\n  },\n  hideCount: true,\n  name: 'Upcoming challenges',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.PRIZE_HIGH_TO_LOW, _sort.SORTS.TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.PAST, {\n  filter: { status: ['COMPLETED', 'PAST'] },\n  hideCount: true,\n  name: 'Past challenges',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.PRIZE_HIGH_TO_LOW, _sort.SORTS.TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.REVIEW_OPPORTUNITIES, {\n  filter: {},\n  hideCount: true,\n  name: 'Open for review',\n  sorts: [_sort.SORTS.REVIEW_OPPORTUNITIES_START_DATE, _sort.SORTS.REVIEW_OPPORTUNITIES_PAYMENT, _sort.SORTS.REVIEW_OPPORTUNITIES_TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.SAVED_REVIEW_OPPORTUNITIES_FILTER, {\n  filter: {},\n  sorts: [_sort.SORTS.REVIEW_OPPORTUNITIES_START_DATE, _sort.SORTS.REVIEW_OPPORTUNITIES_PAYMENT, _sort.SORTS.REVIEW_OPPORTUNITIES_TITLE_A_TO_Z]\n}), _BUCKET_DATA);\n\n/**\n * Returns configuration of all possible challenge buckets.\n * @param {String} userHandle Handle of the authenticated\n * user to filter out My Challenges.\n */\nfunction getBuckets(userHandle) {\n  var res = _lodash2.default.cloneDeep(BUCKET_DATA);\n  res[BUCKETS.MY].filter.users = [userHandle];\n  return res;\n}\n\n/**\n * Tests if a given bucket is of any of the Review Opportunities types\n * @param {String} bucket The bucket in question\n * @return {Boolean} True if the bucket contains Review Opportunities\n */\nvar isReviewOpportunitiesBucket = exports.isReviewOpportunitiesBucket = function isReviewOpportunitiesBucket(bucket) {\n  return bucket === BUCKETS.REVIEW_OPPORTUNITIES || bucket === BUCKETS.SAVED_REVIEW_OPPORTUNITIES_FILTER;\n};\n\n/**\n * Registers a new bucket.\n * @param {String} id\n * @param {Object} bucket\n */\nfunction registerBucket(id, bucket) {\n  if (BUCKET_DATA[id]) {\n    throw new Error('Bucket ID clush with an existing bucket');\n  }\n  BUCKETS[id] = id;\n  BUCKET_DATA[id] = bucket;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(BUCKETS, 'BUCKETS', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(BUCKET_DATA, 'BUCKET_DATA', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(getBuckets, 'getBuckets', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(isReviewOpportunitiesBucket, 'isReviewOpportunitiesBucket', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(registerBucket, 'registerBucket', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/buckets.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/challenge/buckets.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.isReviewOpportunitiesBucket = exports.BUCKET_DATA = exports.BUCKETS = undefined;\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _BUCKET_DATA; /**\n                   * Standard challenge buckets\n                   */\n\nexports.getBuckets = getBuckets;\nexports.registerBucket = registerBucket;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _sort = __webpack_require__(/*! ./sort */ \"./src/utils/challenge/sort.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\nvar BUCKETS = exports.BUCKETS = {\n  ALL: 'all',\n  MY: 'my',\n  OPEN_FOR_REGISTRATION: 'openForRegistration',\n  ONGOING: 'ongoing',\n  PAST: 'past',\n  SAVED_FILTER: 'saved-filter',\n  UPCOMING: 'upcoming',\n  REVIEW_OPPORTUNITIES: 'reviewOpportunities',\n  SAVED_REVIEW_OPPORTUNITIES_FILTER: 'savedReviewOpportunitiesFilter'\n};\n\nvar BUCKET_DATA = exports.BUCKET_DATA = (_BUCKET_DATA = {}, (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.ALL, {\n  filter: {\n    started: true,\n    status: ['ACTIVE']\n  },\n  hideCount: false,\n  name: 'All Challenges',\n  sorts: []\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.MY, {\n  filter: {\n    started: true,\n    status: ['ACTIVE']\n  },\n  hideCount: false,\n  name: 'My Challenges',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.TIME_TO_SUBMIT, _sort.SORTS.NUM_REGISTRANTS, _sort.SORTS.NUM_SUBMISSIONS, _sort.SORTS.PRIZE_HIGH_TO_LOW, _sort.SORTS.TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.OPEN_FOR_REGISTRATION, {\n  filter: {\n    registrationOpen: true,\n    started: true,\n    status: ['ACTIVE']\n  },\n  hideCount: false,\n  name: 'Open for registration',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.TIME_TO_REGISTER, _sort.SORTS.TIME_TO_SUBMIT, _sort.SORTS.NUM_REGISTRANTS, _sort.SORTS.NUM_SUBMISSIONS, _sort.SORTS.PRIZE_HIGH_TO_LOW, _sort.SORTS.TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.ONGOING, {\n  filter: {\n    registrationOpen: false,\n    started: true,\n    status: ['ACTIVE']\n  },\n  hideCount: false,\n  name: 'Ongoing challenges',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.CURRENT_PHASE, _sort.SORTS.TITLE_A_TO_Z, _sort.SORTS.PRIZE_HIGH_TO_LOW]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.UPCOMING, {\n  filter: {\n    upcoming: true\n  },\n  hideCount: true,\n  name: 'Upcoming challenges',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.PRIZE_HIGH_TO_LOW, _sort.SORTS.TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.PAST, {\n  filter: { status: ['COMPLETED', 'PAST'] },\n  hideCount: true,\n  name: 'Past challenges',\n  sorts: [_sort.SORTS.MOST_RECENT, _sort.SORTS.PRIZE_HIGH_TO_LOW, _sort.SORTS.TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.REVIEW_OPPORTUNITIES, {\n  filter: {},\n  hideCount: true,\n  name: 'Open for review',\n  sorts: [_sort.SORTS.REVIEW_OPPORTUNITIES_START_DATE, _sort.SORTS.REVIEW_OPPORTUNITIES_PAYMENT, _sort.SORTS.REVIEW_OPPORTUNITIES_TITLE_A_TO_Z]\n}), (0, _defineProperty3.default)(_BUCKET_DATA, BUCKETS.SAVED_REVIEW_OPPORTUNITIES_FILTER, {\n  filter: {},\n  sorts: [_sort.SORTS.REVIEW_OPPORTUNITIES_START_DATE, _sort.SORTS.REVIEW_OPPORTUNITIES_PAYMENT, _sort.SORTS.REVIEW_OPPORTUNITIES_TITLE_A_TO_Z]\n}), _BUCKET_DATA);\n\n/**\n * Returns configuration of all possible challenge buckets.\n * @param {String} userHandle Handle of the authenticated\n * user to filter out My Challenges.\n */\nfunction getBuckets(userHandle) {\n  var res = _lodash2.default.cloneDeep(BUCKET_DATA);\n  res[BUCKETS.MY].filter.users = [userHandle];\n  return res;\n}\n\n/**\n * Tests if a given bucket is of any of the Review Opportunities types\n * @param {String} bucket The bucket in question\n * @return {Boolean} True if the bucket contains Review Opportunities\n */\nvar isReviewOpportunitiesBucket = exports.isReviewOpportunitiesBucket = function isReviewOpportunitiesBucket(bucket) {\n  return bucket === BUCKETS.REVIEW_OPPORTUNITIES || bucket === BUCKETS.SAVED_REVIEW_OPPORTUNITIES_FILTER;\n};\n\n/**\n * Registers a new bucket.\n * @param {String} id\n * @param {Object} bucket\n */\nfunction registerBucket(id, bucket) {\n  if (BUCKET_DATA[id]) {\n    throw new Error('Bucket ID clush with an existing bucket');\n  }\n  BUCKETS[id] = id;\n  BUCKET_DATA[id] = bucket;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(BUCKETS, 'BUCKETS', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(BUCKET_DATA, 'BUCKET_DATA', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(getBuckets, 'getBuckets', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(isReviewOpportunitiesBucket, 'isReviewOpportunitiesBucket', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(registerBucket, 'registerBucket', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/buckets.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/buckets.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/challenge/buckets.js?");
 
 /***/ }),
 
@@ -1114,7 +1114,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _set = __webpack_require__(/*! babel-runtime/core-js/set */ \"babel-runtime/core-js/set\");\n\nvar _set2 = _interopRequireDefault(_set);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.filterByDate = filterByDate;\nexports.newMeta = newMeta;\nexports.addTrack = addTrack;\nexports.getFilterFunction = getFilterFunction;\nexports.getReviewOpportunitiesFilterFunction = getReviewOpportunitiesFilterFunction;\nexports.combine = combine;\nexports.mapToBackend = mapToBackend;\nexports.removeTrack = removeTrack;\nexports.setEndDate = setEndDate;\nexports.setReviewOpportunityType = setReviewOpportunityType;\nexports.setStartDate = setStartDate;\nexports.setSubtracks = setSubtracks;\nexports.setTags = setTags;\nexports.setText = setText;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _tc = __webpack_require__(/*! ../tc */ \"./src/utils/tc.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"challenge.filter\"\n       *\n       * @desc\n       * Universal challenge filter. Must be used in all places where we need filter\n       * or fetch challenges. This way we keep all related logic in the same place,\n       * which simplifies maintenance and modifications of the code.\n       *\n       * The state of challenge filter is a plain JS object, containing only plain\n       * data fields. It allows to avoid any problems with its storage inside Redux\n       * store; with its serialization into / deserialization from a string. Each\n       * field of the state describes a single rule for filtering the challenges.\n       * The filter allows only those challenges that match all defined rules.\n       * Undefined, null fields are ignored.\n       *\n       * The following fields are supported:\n       *\n       * endDate {Number|String} - Permits only those challenges with submission\n       * deadline before this date.\n       *\n       * groupIds {Array} - Permits only the challenges belonging to at least one\n       * of the groups which IDs are presented as keys in this object.\n       *\n       * or {Object[]} - All other filter fields applied to the challenge with AND\n       * logic, i.e. a challenge must satisfy each specified filter rule to match the\n       * filter as whole. In some cases we want to have OR logic between filter rules,\n       * and this array allows to achieve it: each object in this array is treated as\n       * an additional filter (these object may have all the same fields as the root\n       * filter state object), to be tested with OR logic.\n       *\n       * registrationOpen {Boolean} - Permits only the challenges with open or closed\n       * registration.\n       *\n       * startDate {Number|String} - Permits only those challenges started after this\n       * date.\n       *\n       * status {Array} - Permits only the challenges with status matching one of\n       * the keys of this object.\n       *\n       * started {Boolean} - Matches only the challenges with start date in past.\n       * It turns out that status ACTIVE also includes upcoming activated challenges,\n       * thus we need this additional filter.\n       *\n       * subtracks {Array} - Permits only the challenges belonging to at least one\n       * of the competition subtracks presented as keys of this object.\n       *\n       * tags {Array} - Permits only the challenges that have at least one of the\n       * tags within their platform and technology tags (keywords).\n       *\n       * text {String} - Free-text string which will be matched against challenge\n       * name, its platform and technology tags. If not found anywhere, the challenge\n       * is filtered out. Case-insensitive.\n       *\n       * tracks {Object} - Permits only the challenges belonging to at least one of\n       * the competition tracks presented as keys of this object.\n       *\n       * upcoming {Boolean} - Permits only upcoming challenges.\n       *\n       * users {Array} - Permits only the challenges where the specified (by handles)\n       * users are participating.\n       */\n\n/**\n * Here are many similiar filerBy..(challenge, state) functions. Each of them\n * checks whether the given challenge fulfills the corresponding filtering rule\n * from the filter state object, and returns true or false depending on it.\n */\n\nfunction filterByEndDate(challenge, state) {\n  if (!state.endDate) return true;\n  return (0, _moment2.default)(state.endDate).isAfter(challenge.registrationStartDate);\n}\n\nfunction filterByGroupIds(challenge, state) {\n  if (!state.groupIds) return true;\n  return state.groupIds.some(function (id) {\n    return challenge.groups[id];\n  });\n}\n\nfunction filterByRegistrationOpen(challenge, state) {\n  if (_lodash2.default.isUndefined(state.registrationOpen)) return true;\n  var isRegOpen = function isRegOpen() {\n    if (challenge.registrationOpen) {\n      return challenge.registrationOpen === 'Yes';\n    }\n    if (challenge.subTrack === 'MARATHON_MATCH') {\n      return challenge.status !== 'PAST';\n    }\n    var registrationPhase = challenge.allPhases.find(function (item) {\n      return item.phaseType === 'Registration';\n    });\n    if (!registrationPhase || registrationPhase.phaseStatus !== 'Open') {\n      return false;\n    }\n    if (challenge.track === 'DESIGN') {\n      var checkpointPhase = challenge.allPhases.find(function (item) {\n        return item.phaseType === 'Checkpoint Submission';\n      });\n      return !checkpointPhase || checkpointPhase.phaseStatus !== 'Closed';\n    }\n    return true;\n  };\n  return isRegOpen() === state.registrationOpen;\n}\n\n/**\n * Filter function for Review Opportunity Type, will be used internally in filter.js\n * @param {Object} opp Review Opportunity object\n * @param {Object} state Filter state\n * @return {Boolean} True if opp satifies the filter\n */\nfunction filterByReviewOpportunityType(opp, state) {\n  if (!state.reviewOpportunityType) return true;\n  return opp.type === state.reviewOpportunityType;\n}\n\nfunction filterByStartDate(challenge, state) {\n  if (!state.startDate) return true;\n  return (0, _moment2.default)(state.startDate).isBefore(challenge.submissionEndDate);\n}\n\nfunction filterByStarted(challenge, state) {\n  if (_lodash2.default.isUndefined(state.started)) return true;\n  return (0, _moment2.default)(challenge.registrationStartDate).isBefore(Date.now());\n}\n\nfunction filterByStatus(challenge, state) {\n  if (!state.status) return true;\n  return state.status.includes(challenge.status);\n}\n\nfunction filterBySubtracks(challenge, state) {\n  if (!state.subtracks) return true;\n\n  /* TODO: Although this is taken from the current code in prod,\n   * it probably does not work in all cases. It should be double-checked,\n   * why challenge subtracks in challenge objects are different from those\n   * return from the API as the list of possible subtracks. */\n  var filterSubtracks = state.subtracks.map(function (item) {\n    return item.toLowerCase().replace(/[_ ]/g, '');\n  });\n  var challengeSubtrack = challenge.subTrack.toLowerCase().replace(/[_ ]/g, '');\n  return filterSubtracks.includes(challengeSubtrack);\n}\n\nfunction filterByTags(challenge, state) {\n  if (!state.tags) return true;\n  var platforms = challenge.platforms,\n      technologies = challenge.technologies;\n\n  var str = (platforms + ' ' + technologies).toLowerCase();\n  return state.tags.some(function (tag) {\n    return str.includes(tag.toLowerCase());\n  });\n}\n\nfunction filterByText(challenge, state) {\n  if (!state.text) return true;\n  var str = (challenge.name + ' ' + challenge.platforms + ' ' + challenge.technologies).toLowerCase();\n  return str.includes(state.text.toLowerCase());\n}\n\nfunction filterByTrack(challenge, state) {\n  if (!state.tracks) return true;\n\n  /* Development challenges having Data Science tech tag, still should be\n   * included into data science track. */\n  if (state.tracks[_tc.COMPETITION_TRACKS.DATA_SCIENCE] && _lodash2.default.includes(challenge.technologies, 'Data Science')) {\n    return true;\n  }\n\n  return _lodash2.default.keys(state.tracks).some(function (track) {\n    return challenge.communities.has(track);\n  });\n}\n\nfunction filterByUpcoming(challenge, state) {\n  if (_lodash2.default.isUndefined(state.upcoming)) return true;\n  return (0, _moment2.default)().isBefore(challenge.registrationStartDate);\n}\n\nfunction filterByUsers(challenge, state) {\n  if (!state.users) return true;\n  return state.users.find(function (user) {\n    return challenge.users[user];\n  });\n}\n\n/**\n * [filterByDate filter challenges by date reange]\n * @param  {[type]} challenges input challenges\n * @param  {[type]} filter     filter including startDate and endDate\n * @return {[type]}            filtered challenges array\n */\nfunction filterByDate(challenges, filter) {\n  var cs = challenges.filter(function (c) {\n    return filterByStartDate(c, filter);\n  });\n  cs = cs.filter(function (c) {\n    return filterByEndDate(c, filter);\n  });\n  return cs;\n}\n\n/**\n * [newMeta compute new meta via challenges and filter]\n * @param  {[type]} meta       old meta\n * @param  {[type]} challenges input challenges\n * @param  {[type]} filter     filter including startDate and end endDate\n * @return {[type]}            new meta\n */\nfunction newMeta(meta, challenges, filter) {\n  if (!filter.startDate && !filter.endDate) {\n    return meta;\n  }\n  var m = {};\n  m.allChallengesCount = challenges.length;\n  m.openChallengesCount = challenges.filter(function (c) {\n    return c.registrationOpen === 'Yes';\n  }).length;\n  m.ongoingChallengesCount = m.allChallengesCount - m.openChallengesCount;\n  m.myChallengesCount = challenges.filter(function (c) {\n    return c.user && !_lodash2.default.isEmpty(c.user);\n  }).length;\n  m.totalCount = challenges.length;\n  return m;\n}\n\n/**\n * Returns clone of the state with the specified competition track added.\n * @param {Object} state\n * @param {String} track\n * @return {Object} Resulting state.\n */\nfunction addTrack(state, track) {\n  /* When state has no tracks field all tracks are allowed, thus no need to\n   * touch the object. */\n  if (!state.tracks) return state;\n\n  var res = _lodash2.default.clone(state);\n  res.tracks = _lodash2.default.clone(res.tracks);\n  res.tracks[track] = true;\n\n  /* Selecting all tracks is the same as having no tracks field. To keep the\n   * state more simple at any time, we remove tracks field in such case. */\n  if (!_lodash2.default.values(_tc.COMPETITION_TRACKS).some(function (item) {\n    return !res.tracks[item];\n  })) {\n    delete res.tracks;\n  }\n\n  return res;\n}\n\n/**\n * Generates filter function for the state.\n * @param {Object} state\n * @return {Function}\n */\nfunction getFilterFunction(state) {\n  return function (challenge) {\n    var test = filterByStatus(challenge, state) && filterByTrack(challenge, state) && filterByUpcoming(challenge, state) && filterByGroupIds(challenge, state) && filterByText(challenge, state) && filterByTags(challenge, state) && filterBySubtracks(challenge, state) && filterByUsers(challenge, state) && filterByEndDate(challenge, state) && filterByStartDate(challenge, state) && filterByStarted(challenge, state) && filterByRegistrationOpen(challenge, state);\n    if (!test && state.or) {\n      var pos = 0;\n      while (!test && pos < state.or.length) {\n        test = getFilterFunction(state.or[pos])(challenge);\n        pos += 1;\n      }\n    }\n    return test;\n  };\n}\n\n/**\n * Generates a Review Opportunities filter function for the provided filter state.\n * @param {Object} state\n * @return {Function}\n */\nfunction getReviewOpportunitiesFilterFunction(state) {\n  return function (opp) {\n    // Review Opportunity objects have a challenge field which\n    // is largely compatible with many of the existing filter functions\n    // especially after a few normalization tweaks\n    var challenge = (0, _extends3.default)({}, opp.challenge, {\n      // This allows filterByText to search for Review Types and Challenge Titles\n      name: opp.challenge.title + ' ' + _tc.REVIEW_OPPORTUNITY_TYPES[opp.type],\n      registrationStartDate: opp.startDate, // startDate of Review, not Challenge\n      subTrack: opp.challenge.subTrack || '', // Sometimes back-end doesn't return this field\n      submissionEndDate: opp.startDate, // Currently uses startDate for both date comparisons\n      communities: new _set2.default([// Used to filter by Track, and communities at a future date\n      opp.challenge.track.toLowerCase()])\n    });\n\n    return filterByTrack(challenge, state) && filterByText(challenge, state) && filterByTags(challenge, state) && filterBySubtracks(challenge, state) && filterByEndDate(challenge, state) && filterByStartDate(challenge, state) && filterByReviewOpportunityType(opp, state);\n  };\n}\n\n/* ************************************************************************** */\n/* Below is a group of functions that allow to combine multiple challenge\n * filters together. If you are not adding a new filter functionality, just\n * look for the exported combine(..) function.\n *\n * All other helper functions in this section take two filter state objects as\n * arguments, and combine some of the filter rules, merging the resulting one\n * into the first filter state object.\n */\n\n/* NOTE: Current implementation ignores plenty of rules when combining filters.\n * It is fine for the only current use case: we use combine just before calling\n * to mapToBackend(..) function, to map several frontend filters to the\n * matching backend one. The way mapToBackend(..) works, this ignoring of\n * some rules is not a big deal (resulting backend filter will be not that\n * specific, as it probably could be, but due to the current api limitations\n * we cannot be too specific anyway). If you are going to use this for anything\n * else - thing twice what are you doing? If you need it for filtering, it is\n * just a lot easier to filter by each frontend filter in turns, rather than\n * combine them into a single filter. */\n\n/* This ESLint rule is disabled for combineXXX(..) functions, as they are\n * intended to be used only internally, with a newly constructed object\n * passed in as the first argument (i.e. we take care that there is no\n * side-effects to mutate it within this module, and these functions\n * are not exported outside of the module). */\n/* eslint-disable no-param-reassign */\n\nfunction combineArrayRules(a, b, ruleName) {\n  var or = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n  if (a[ruleName] && b[ruleName]) {\n    if (or) a[ruleName] = _lodash2.default.uniq(a[ruleName].concat(b[ruleName]));else a[ruleName] = _lodash2.default.intersection(a[ruleName], b[ruleName]);\n  } else if (b[ruleName]) a[ruleName] = b[ruleName];\n}\n\nfunction combineEndDate(a, b) {\n  if (a.endDate && b.endDate) {\n    a.endDate = _moment2.default.min(a.endDate, b.endDate).format();\n  } else if (b.endDate) a.endDate = b.endDate;\n}\n\nfunction combineStartDate(a, b) {\n  if (a.startDate && b.startDate) {\n    a.startDate = _moment2.default.max(a.startDate, b.startDate).format();\n  } else if (b.startDate) a.startDate = b.startDate;\n}\n\nfunction combineTracks(a, b) {\n  if (a.tracks && b.tracks) {\n    _lodash2.default.forIn(a.tracks, function (value, key) {\n      if (!b.tracks[key]) delete a.tracks[key];\n    });\n  } else if (b.tracks) a.tracks = b.tracks;\n}\n\n/* eslint-enable no-param-reassign */\n\n/**\n * Combines multiple filter state objects together. Resulting state describes\n * the filter, which matches only those challenges that satisfy each of the\n * filters passed in as arguments.\n *\n * The main intended use of this function is to combine multiple frontend\n * challenge filters into a single one, that can be mapped into the\n * corresponding backend filter by mapToBackend(..) function.\n *\n * @param {Object} filters Input filter state objects to combine.\n * @return {Object}\n */\nfunction combine() {\n  var res = {};\n\n  for (var _len = arguments.length, filters = Array(_len), _key = 0; _key < _len; _key++) {\n    filters[_key] = arguments[_key];\n  }\n\n  filters.forEach(function (filter) {\n    combineEndDate(res, filter);\n    combineArrayRules(res, filter, 'groupIds');\n    /* TODO: The registrationOpen rule is just ignored for now. */\n    combineStartDate(res, filter);\n    combineArrayRules(res, filter, 'or', true);\n    combineArrayRules(res, filter, 'status');\n    combineArrayRules(res, filter, 'subtracks');\n    combineArrayRules(res, filter, 'tags');\n    /* TODO: The text rule is just ignored for now. */\n    combineTracks(res, filter);\n    /* TODO: The upcoming rule is just ignored for now. */\n    /* TODO: The users rule is just ignored for now. */\n  });\n  return res;\n}\n\n/* ************************************************************************** */\n/* Below is a group of function that allow to map a frontend filter into the\n * corresponding backend (api) one. If you are not adding a new filter\n * functionality, just look for the exported mapToBackend(..) function. */\n\n/**\n * Maps the frontend challenge filter into the corresponding backend (api) one.\n * As there is no 1:1 match between the frontend and backend challenge filters,\n * the resulting backend filter is always equal or broader than the given\n * frontend one; i.e. any challenge that satisfies the original frontend filter\n * will pass the backend one, though some of the challenges that pass the\n * backend filter may fail the frontend one.\n *\n * It is assumed that this function will help us to load challenges from the\n * backend more specifically, though it does not prevent as from the need\n * always perform the final filtering at the frontend side.\n *\n * @param {Object} filter\n * @return {Object}\n */\nfunction mapToBackend(filter) {\n  if (filter.or) return {};\n\n  var res = {};\n  if (filter.groupIds) res.groupIds = filter.groupIds.join(',');\n\n  /* NOTE: Right now the frontend challenge filter by tag works different,\n   * it looks for matches in the challenge name OR in the techs / platforms. */\n  // if (filter.tags) res.technologies = filter.tags.join(',');\n\n  return res;\n}\n\n/**\n * Returns clone of the state with the specified competition track removed.\n * @param {Object} state\n * @param {String} track\n * @return {Object} Resulting state.\n */\nfunction removeTrack(state, track) {\n  var res = _lodash2.default.clone(state);\n  if (res.tracks) res.tracks = _lodash2.default.clone(res.tracks);else {\n    res.tracks = {};\n    _lodash2.default.forIn(_tc.COMPETITION_TRACKS, function (item) {\n      res.tracks[item] = true;\n    });\n  }\n  delete res.tracks[track];\n  return res;\n}\n\n/**\n * Clone the state and sets the end date.\n * @param {Object} state\n * @param {String} date\n * @return {Object}\n */\nfunction setEndDate(state, date) {\n  if (date) return (0, _extends3.default)({}, state, { endDate: date });\n  if (!state.endDate) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.endDate;\n  return res;\n}\n\n/**\n * Clones the state and sets the review opportunity type.\n * @param {Object} state\n * @param {Array} reviewOpportunityType Possible values found in utils/tc REVIEW_OPPORTUNITY_TYPES\n * @return {Object}\n */\nfunction setReviewOpportunityType(state, reviewOpportunityType) {\n  if (reviewOpportunityType) return (0, _extends3.default)({}, state, { reviewOpportunityType: reviewOpportunityType });\n  if (!state.reviewOpportunityType) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.reviewOpportunityType;\n  return res;\n}\n\n/**\n * Clones the state and sets the start date.\n * @param {Object} state\n * @param {String} date ISO date string.\n * @return {Object}\n */\nfunction setStartDate(state, date) {\n  if (date) return (0, _extends3.default)({}, state, { startDate: date });\n  if (!state.startDate) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.startDate;\n  return res;\n}\n\n/**\n * Clones the state and sets the subtracks.\n * @param {Object} state\n * @param {Array} subtracks\n * @return {Object}\n */\nfunction setSubtracks(state, subtracks) {\n  if (subtracks && subtracks.length) return (0, _extends3.default)({}, state, { subtracks: subtracks });\n  if (!state.subtracks) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.subtracks;\n  return res;\n}\n\n/**\n * Clones the state and sets the tags.\n * @param {Object} state\n * @param {Array} tags String array.\n * @return {Object}\n */\nfunction setTags(state, tags) {\n  if (tags && tags.length) return (0, _extends3.default)({}, state, { tags: tags });\n  if (!state.tags) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.tags;\n  return res;\n}\n\n/**\n * Clones fitler state and sets the free-text string for the filtering by\n * challenge name and tags. To clear the string set it to anything evaluating\n * to falst (empty string, null, undefined).\n * @param {Object} state\n * @param {String} text\n * @return {Object} Resulting string.\n */\nfunction setText(state, text) {\n  if (!text && !state.text) return state;\n  var res = _lodash2.default.clone(state);\n  if (text) res.text = text;else delete res.text;\n  return res;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(filterByEndDate, 'filterByEndDate', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByGroupIds, 'filterByGroupIds', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByRegistrationOpen, 'filterByRegistrationOpen', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByReviewOpportunityType, 'filterByReviewOpportunityType', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByStartDate, 'filterByStartDate', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByStarted, 'filterByStarted', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByStatus, 'filterByStatus', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterBySubtracks, 'filterBySubtracks', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByTags, 'filterByTags', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByText, 'filterByText', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByTrack, 'filterByTrack', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByUpcoming, 'filterByUpcoming', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByUsers, 'filterByUsers', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByDate, 'filterByDate', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(newMeta, 'newMeta', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(addTrack, 'addTrack', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(getFilterFunction, 'getFilterFunction', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(getReviewOpportunitiesFilterFunction, 'getReviewOpportunitiesFilterFunction', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combineArrayRules, 'combineArrayRules', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combineEndDate, 'combineEndDate', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combineStartDate, 'combineStartDate', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combineTracks, 'combineTracks', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combine, 'combine', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(mapToBackend, 'mapToBackend', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(removeTrack, 'removeTrack', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setEndDate, 'setEndDate', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setReviewOpportunityType, 'setReviewOpportunityType', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setStartDate, 'setStartDate', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setSubtracks, 'setSubtracks', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setTags, 'setTags', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setText, 'setText', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/filter.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/challenge/filter.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _set = __webpack_require__(/*! babel-runtime/core-js/set */ \"babel-runtime/core-js/set\");\n\nvar _set2 = _interopRequireDefault(_set);\n\nvar _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ \"babel-runtime/helpers/extends\");\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nexports.filterByDate = filterByDate;\nexports.newMeta = newMeta;\nexports.addTrack = addTrack;\nexports.getFilterFunction = getFilterFunction;\nexports.getReviewOpportunitiesFilterFunction = getReviewOpportunitiesFilterFunction;\nexports.combine = combine;\nexports.mapToBackend = mapToBackend;\nexports.removeTrack = removeTrack;\nexports.setEndDate = setEndDate;\nexports.setReviewOpportunityType = setReviewOpportunityType;\nexports.setStartDate = setStartDate;\nexports.setSubtracks = setSubtracks;\nexports.setTags = setTags;\nexports.setText = setText;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _tc = __webpack_require__(/*! ../tc */ \"./src/utils/tc.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module \"challenge.filter\"\n       *\n       * @desc\n       * Universal challenge filter. Must be used in all places where we need filter\n       * or fetch challenges. This way we keep all related logic in the same place,\n       * which simplifies maintenance and modifications of the code.\n       *\n       * The state of challenge filter is a plain JS object, containing only plain\n       * data fields. It allows to avoid any problems with its storage inside Redux\n       * store; with its serialization into / deserialization from a string. Each\n       * field of the state describes a single rule for filtering the challenges.\n       * The filter allows only those challenges that match all defined rules.\n       * Undefined, null fields are ignored.\n       *\n       * The following fields are supported:\n       *\n       * endDate {Number|String} - Permits only those challenges with submission\n       * deadline before this date.\n       *\n       * groupIds {Array} - Permits only the challenges belonging to at least one\n       * of the groups which IDs are presented as keys in this object.\n       *\n       * or {Object[]} - All other filter fields applied to the challenge with AND\n       * logic, i.e. a challenge must satisfy each specified filter rule to match the\n       * filter as whole. In some cases we want to have OR logic between filter rules,\n       * and this array allows to achieve it: each object in this array is treated as\n       * an additional filter (these object may have all the same fields as the root\n       * filter state object), to be tested with OR logic.\n       *\n       * registrationOpen {Boolean} - Permits only the challenges with open or closed\n       * registration.\n       *\n       * startDate {Number|String} - Permits only those challenges started after this\n       * date.\n       *\n       * status {Array} - Permits only the challenges with status matching one of\n       * the keys of this object.\n       *\n       * started {Boolean} - Matches only the challenges with start date in past.\n       * It turns out that status ACTIVE also includes upcoming activated challenges,\n       * thus we need this additional filter.\n       *\n       * subtracks {Array} - Permits only the challenges belonging to at least one\n       * of the competition subtracks presented as keys of this object.\n       *\n       * tags {Array} - Permits only the challenges that have at least one of the\n       * tags within their platform and technology tags (keywords).\n       *\n       * text {String} - Free-text string which will be matched against challenge\n       * name, its platform and technology tags. If not found anywhere, the challenge\n       * is filtered out. Case-insensitive.\n       *\n       * tracks {Object} - Permits only the challenges belonging to at least one of\n       * the competition tracks presented as keys of this object.\n       *\n       * upcoming {Boolean} - Permits only upcoming challenges.\n       *\n       * users {Array} - Permits only the challenges where the specified (by handles)\n       * users are participating.\n       */\n\n/**\n * Here are many similiar filerBy..(challenge, state) functions. Each of them\n * checks whether the given challenge fulfills the corresponding filtering rule\n * from the filter state object, and returns true or false depending on it.\n */\n\nfunction filterByEndDate(challenge, state) {\n  if (!state.endDate) return true;\n  return (0, _moment2.default)(state.endDate).isAfter(challenge.registrationStartDate);\n}\n\nfunction filterByGroupIds(challenge, state) {\n  if (!state.groupIds) return true;\n  return state.groupIds.some(function (id) {\n    return challenge.groups[id];\n  });\n}\n\nfunction filterByRegistrationOpen(challenge, state) {\n  if (_lodash2.default.isUndefined(state.registrationOpen)) return true;\n  var isRegOpen = function isRegOpen() {\n    if (challenge.registrationOpen) {\n      return challenge.registrationOpen === 'Yes';\n    }\n    if (challenge.subTrack === 'MARATHON_MATCH') {\n      return challenge.status !== 'PAST';\n    }\n    var registrationPhase = challenge.allPhases.find(function (item) {\n      return item.phaseType === 'Registration';\n    });\n    if (!registrationPhase || registrationPhase.phaseStatus !== 'Open') {\n      return false;\n    }\n    if (challenge.track === 'DESIGN') {\n      var checkpointPhase = challenge.allPhases.find(function (item) {\n        return item.phaseType === 'Checkpoint Submission';\n      });\n      return !checkpointPhase || checkpointPhase.phaseStatus !== 'Closed';\n    }\n    return true;\n  };\n  return isRegOpen() === state.registrationOpen;\n}\n\n/**\n * Filter function for Review Opportunity Type, will be used internally in filter.js\n * @param {Object} opp Review Opportunity object\n * @param {Object} state Filter state\n * @return {Boolean} True if opp satifies the filter\n */\nfunction filterByReviewOpportunityType(opp, state) {\n  if (!state.reviewOpportunityType) return true;\n  return opp.type === state.reviewOpportunityType;\n}\n\nfunction filterByStartDate(challenge, state) {\n  if (!state.startDate) return true;\n  return (0, _moment2.default)(state.startDate).isBefore(challenge.submissionEndDate);\n}\n\nfunction filterByStarted(challenge, state) {\n  if (_lodash2.default.isUndefined(state.started)) return true;\n  return (0, _moment2.default)(challenge.registrationStartDate).isBefore(Date.now());\n}\n\nfunction filterByStatus(challenge, state) {\n  if (!state.status) return true;\n  return state.status.includes(challenge.status);\n}\n\nfunction filterBySubtracks(challenge, state) {\n  if (!state.subtracks) return true;\n\n  /* TODO: Although this is taken from the current code in prod,\n   * it probably does not work in all cases. It should be double-checked,\n   * why challenge subtracks in challenge objects are different from those\n   * return from the API as the list of possible subtracks. */\n  var filterSubtracks = state.subtracks.map(function (item) {\n    return item.toLowerCase().replace(/[_ ]/g, '');\n  });\n  var challengeSubtrack = challenge.subTrack.toLowerCase().replace(/[_ ]/g, '');\n  return filterSubtracks.includes(challengeSubtrack);\n}\n\nfunction filterByTags(challenge, state) {\n  if (!state.tags) return true;\n  var platforms = challenge.platforms,\n      technologies = challenge.technologies;\n\n  var str = (platforms + ' ' + technologies).toLowerCase();\n  return state.tags.some(function (tag) {\n    return str.includes(tag.toLowerCase());\n  });\n}\n\nfunction filterByText(challenge, state) {\n  if (!state.text) return true;\n  var str = (challenge.name + ' ' + challenge.platforms + ' ' + challenge.technologies).toLowerCase();\n  return str.includes(state.text.toLowerCase());\n}\n\nfunction filterByTrack(challenge, state) {\n  if (!state.tracks) return true;\n\n  /* Development challenges having Data Science tech tag, still should be\n   * included into data science track. */\n  if (state.tracks[_tc.COMPETITION_TRACKS.DATA_SCIENCE] && _lodash2.default.includes(challenge.technologies, 'Data Science')) {\n    return true;\n  }\n\n  return _lodash2.default.keys(state.tracks).some(function (track) {\n    return challenge.communities.has(track);\n  });\n}\n\nfunction filterByUpcoming(challenge, state) {\n  if (_lodash2.default.isUndefined(state.upcoming)) return true;\n  return (0, _moment2.default)().isBefore(challenge.registrationStartDate);\n}\n\nfunction filterByUsers(challenge, state) {\n  if (!state.users) return true;\n  return state.users.find(function (user) {\n    return challenge.users[user];\n  });\n}\n\n/**\n * [filterByDate filter challenges by date reange]\n * @param  {[type]} challenges input challenges\n * @param  {[type]} filter     filter including startDate and endDate\n * @return {[type]}            filtered challenges array\n */\nfunction filterByDate(challenges, filter) {\n  var cs = challenges.filter(function (c) {\n    return filterByStartDate(c, filter);\n  });\n  cs = cs.filter(function (c) {\n    return filterByEndDate(c, filter);\n  });\n  return cs;\n}\n\n/**\n * [newMeta compute new meta via challenges and filter]\n * @param  {[type]} meta       old meta\n * @param  {[type]} challenges input challenges\n * @param  {[type]} filter     filter including startDate and end endDate\n * @return {[type]}            new meta\n */\nfunction newMeta(meta, challenges, filter) {\n  if (!filter.startDate && !filter.endDate) {\n    return meta;\n  }\n  var m = {};\n  m.allChallengesCount = challenges.length;\n  m.openChallengesCount = challenges.filter(function (c) {\n    return c.registrationOpen === 'Yes';\n  }).length;\n  m.ongoingChallengesCount = m.allChallengesCount - m.openChallengesCount;\n  m.myChallengesCount = challenges.filter(function (c) {\n    return c.user && !_lodash2.default.isEmpty(c.user);\n  }).length;\n  m.totalCount = challenges.length;\n  return m;\n}\n\n/**\n * Returns clone of the state with the specified competition track added.\n * @param {Object} state\n * @param {String} track\n * @return {Object} Resulting state.\n */\nfunction addTrack(state, track) {\n  /* When state has no tracks field all tracks are allowed, thus no need to\n   * touch the object. */\n  if (!state.tracks) return state;\n\n  var res = _lodash2.default.clone(state);\n  res.tracks = _lodash2.default.clone(res.tracks);\n  res.tracks[track] = true;\n\n  /* Selecting all tracks is the same as having no tracks field. To keep the\n   * state more simple at any time, we remove tracks field in such case. */\n  if (!_lodash2.default.values(_tc.COMPETITION_TRACKS).some(function (item) {\n    return !res.tracks[item];\n  })) {\n    delete res.tracks;\n  }\n\n  return res;\n}\n\n/**\n * Generates filter function for the state.\n * @param {Object} state\n * @return {Function}\n */\nfunction getFilterFunction(state) {\n  return function (challenge) {\n    var test = filterByStatus(challenge, state) && filterByTrack(challenge, state) && filterByUpcoming(challenge, state) && filterByGroupIds(challenge, state) && filterByText(challenge, state) && filterByTags(challenge, state) && filterBySubtracks(challenge, state) && filterByUsers(challenge, state) && filterByEndDate(challenge, state) && filterByStartDate(challenge, state) && filterByStarted(challenge, state) && filterByRegistrationOpen(challenge, state);\n    if (!test && state.or) {\n      var pos = 0;\n      while (!test && pos < state.or.length) {\n        test = getFilterFunction(state.or[pos])(challenge);\n        pos += 1;\n      }\n    }\n    return test;\n  };\n}\n\n/**\n * Generates a Review Opportunities filter function for the provided filter state.\n * @param {Object} state\n * @return {Function}\n */\nfunction getReviewOpportunitiesFilterFunction(state) {\n  return function (opp) {\n    // Review Opportunity objects have a challenge field which\n    // is largely compatible with many of the existing filter functions\n    // especially after a few normalization tweaks\n    var challenge = (0, _extends3.default)({}, opp.challenge, {\n      // This allows filterByText to search for Review Types and Challenge Titles\n      name: opp.challenge.title + ' ' + _tc.REVIEW_OPPORTUNITY_TYPES[opp.type],\n      registrationStartDate: opp.startDate, // startDate of Review, not Challenge\n      subTrack: opp.challenge.subTrack || '', // Sometimes back-end doesn't return this field\n      submissionEndDate: opp.startDate, // Currently uses startDate for both date comparisons\n      communities: new _set2.default([// Used to filter by Track, and communities at a future date\n      opp.challenge.track.toLowerCase()])\n    });\n\n    return filterByTrack(challenge, state) && filterByText(challenge, state) && filterByTags(challenge, state) && filterBySubtracks(challenge, state) && filterByEndDate(challenge, state) && filterByStartDate(challenge, state) && filterByReviewOpportunityType(opp, state);\n  };\n}\n\n/* ************************************************************************** */\n/* Below is a group of functions that allow to combine multiple challenge\n * filters together. If you are not adding a new filter functionality, just\n * look for the exported combine(..) function.\n *\n * All other helper functions in this section take two filter state objects as\n * arguments, and combine some of the filter rules, merging the resulting one\n * into the first filter state object.\n */\n\n/* NOTE: Current implementation ignores plenty of rules when combining filters.\n * It is fine for the only current use case: we use combine just before calling\n * to mapToBackend(..) function, to map several frontend filters to the\n * matching backend one. The way mapToBackend(..) works, this ignoring of\n * some rules is not a big deal (resulting backend filter will be not that\n * specific, as it probably could be, but due to the current api limitations\n * we cannot be too specific anyway). If you are going to use this for anything\n * else - thing twice what are you doing? If you need it for filtering, it is\n * just a lot easier to filter by each frontend filter in turns, rather than\n * combine them into a single filter. */\n\n/* This ESLint rule is disabled for combineXXX(..) functions, as they are\n * intended to be used only internally, with a newly constructed object\n * passed in as the first argument (i.e. we take care that there is no\n * side-effects to mutate it within this module, and these functions\n * are not exported outside of the module). */\n/* eslint-disable no-param-reassign */\n\nfunction combineArrayRules(a, b, ruleName) {\n  var or = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n  if (a[ruleName] && b[ruleName]) {\n    if (or) a[ruleName] = _lodash2.default.uniq(a[ruleName].concat(b[ruleName]));else a[ruleName] = _lodash2.default.intersection(a[ruleName], b[ruleName]);\n  } else if (b[ruleName]) a[ruleName] = b[ruleName];\n}\n\nfunction combineEndDate(a, b) {\n  if (a.endDate && b.endDate) {\n    a.endDate = _moment2.default.min(a.endDate, b.endDate).format();\n  } else if (b.endDate) a.endDate = b.endDate;\n}\n\nfunction combineStartDate(a, b) {\n  if (a.startDate && b.startDate) {\n    a.startDate = _moment2.default.max(a.startDate, b.startDate).format();\n  } else if (b.startDate) a.startDate = b.startDate;\n}\n\nfunction combineTracks(a, b) {\n  if (a.tracks && b.tracks) {\n    _lodash2.default.forIn(a.tracks, function (value, key) {\n      if (!b.tracks[key]) delete a.tracks[key];\n    });\n  } else if (b.tracks) a.tracks = b.tracks;\n}\n\n/* eslint-enable no-param-reassign */\n\n/**\n * Combines multiple filter state objects together. Resulting state describes\n * the filter, which matches only those challenges that satisfy each of the\n * filters passed in as arguments.\n *\n * The main intended use of this function is to combine multiple frontend\n * challenge filters into a single one, that can be mapped into the\n * corresponding backend filter by mapToBackend(..) function.\n *\n * @param {Object} filters Input filter state objects to combine.\n * @return {Object}\n */\nfunction combine() {\n  var res = {};\n\n  for (var _len = arguments.length, filters = Array(_len), _key = 0; _key < _len; _key++) {\n    filters[_key] = arguments[_key];\n  }\n\n  filters.forEach(function (filter) {\n    combineEndDate(res, filter);\n    combineArrayRules(res, filter, 'groupIds');\n    /* TODO: The registrationOpen rule is just ignored for now. */\n    combineStartDate(res, filter);\n    combineArrayRules(res, filter, 'or', true);\n    combineArrayRules(res, filter, 'status');\n    combineArrayRules(res, filter, 'subtracks');\n    combineArrayRules(res, filter, 'tags');\n    /* TODO: The text rule is just ignored for now. */\n    combineTracks(res, filter);\n    /* TODO: The upcoming rule is just ignored for now. */\n    /* TODO: The users rule is just ignored for now. */\n  });\n  return res;\n}\n\n/* ************************************************************************** */\n/* Below is a group of function that allow to map a frontend filter into the\n * corresponding backend (api) one. If you are not adding a new filter\n * functionality, just look for the exported mapToBackend(..) function. */\n\n/**\n * Maps the frontend challenge filter into the corresponding backend (api) one.\n * As there is no 1:1 match between the frontend and backend challenge filters,\n * the resulting backend filter is always equal or broader than the given\n * frontend one; i.e. any challenge that satisfies the original frontend filter\n * will pass the backend one, though some of the challenges that pass the\n * backend filter may fail the frontend one.\n *\n * It is assumed that this function will help us to load challenges from the\n * backend more specifically, though it does not prevent as from the need\n * always perform the final filtering at the frontend side.\n *\n * @param {Object} filter\n * @return {Object}\n */\nfunction mapToBackend(filter) {\n  if (filter.or) return {};\n\n  var res = {};\n  if (filter.groupIds) res.groupIds = filter.groupIds.join(',');\n\n  /* NOTE: Right now the frontend challenge filter by tag works different,\n   * it looks for matches in the challenge name OR in the techs / platforms. */\n  // if (filter.tags) res.technologies = filter.tags.join(',');\n\n  return res;\n}\n\n/**\n * Returns clone of the state with the specified competition track removed.\n * @param {Object} state\n * @param {String} track\n * @return {Object} Resulting state.\n */\nfunction removeTrack(state, track) {\n  var res = _lodash2.default.clone(state);\n  if (res.tracks) res.tracks = _lodash2.default.clone(res.tracks);else {\n    res.tracks = {};\n    _lodash2.default.forIn(_tc.COMPETITION_TRACKS, function (item) {\n      res.tracks[item] = true;\n    });\n  }\n  delete res.tracks[track];\n  return res;\n}\n\n/**\n * Clone the state and sets the end date.\n * @param {Object} state\n * @param {String} date\n * @return {Object}\n */\nfunction setEndDate(state, date) {\n  if (date) return (0, _extends3.default)({}, state, { endDate: date });\n  if (!state.endDate) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.endDate;\n  return res;\n}\n\n/**\n * Clones the state and sets the review opportunity type.\n * @param {Object} state\n * @param {Array} reviewOpportunityType Possible values found in utils/tc REVIEW_OPPORTUNITY_TYPES\n * @return {Object}\n */\nfunction setReviewOpportunityType(state, reviewOpportunityType) {\n  if (reviewOpportunityType) return (0, _extends3.default)({}, state, { reviewOpportunityType: reviewOpportunityType });\n  if (!state.reviewOpportunityType) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.reviewOpportunityType;\n  return res;\n}\n\n/**\n * Clones the state and sets the start date.\n * @param {Object} state\n * @param {String} date ISO date string.\n * @return {Object}\n */\nfunction setStartDate(state, date) {\n  if (date) return (0, _extends3.default)({}, state, { startDate: date });\n  if (!state.startDate) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.startDate;\n  return res;\n}\n\n/**\n * Clones the state and sets the subtracks.\n * @param {Object} state\n * @param {Array} subtracks\n * @return {Object}\n */\nfunction setSubtracks(state, subtracks) {\n  if (subtracks && subtracks.length) return (0, _extends3.default)({}, state, { subtracks: subtracks });\n  if (!state.subtracks) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.subtracks;\n  return res;\n}\n\n/**\n * Clones the state and sets the tags.\n * @param {Object} state\n * @param {Array} tags String array.\n * @return {Object}\n */\nfunction setTags(state, tags) {\n  if (tags && tags.length) return (0, _extends3.default)({}, state, { tags: tags });\n  if (!state.tags) return state;\n  var res = _lodash2.default.clone(state);\n  delete res.tags;\n  return res;\n}\n\n/**\n * Clones fitler state and sets the free-text string for the filtering by\n * challenge name and tags. To clear the string set it to anything evaluating\n * to falst (empty string, null, undefined).\n * @param {Object} state\n * @param {String} text\n * @return {Object} Resulting string.\n */\nfunction setText(state, text) {\n  if (!text && !state.text) return state;\n  var res = _lodash2.default.clone(state);\n  if (text) res.text = text;else delete res.text;\n  return res;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(filterByEndDate, 'filterByEndDate', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByGroupIds, 'filterByGroupIds', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByRegistrationOpen, 'filterByRegistrationOpen', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByReviewOpportunityType, 'filterByReviewOpportunityType', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByStartDate, 'filterByStartDate', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByStarted, 'filterByStarted', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByStatus, 'filterByStatus', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterBySubtracks, 'filterBySubtracks', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByTags, 'filterByTags', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByText, 'filterByText', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByTrack, 'filterByTrack', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByUpcoming, 'filterByUpcoming', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByUsers, 'filterByUsers', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(filterByDate, 'filterByDate', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(newMeta, 'newMeta', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(addTrack, 'addTrack', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(getFilterFunction, 'getFilterFunction', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(getReviewOpportunitiesFilterFunction, 'getReviewOpportunitiesFilterFunction', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combineArrayRules, 'combineArrayRules', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combineEndDate, 'combineEndDate', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combineStartDate, 'combineStartDate', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combineTracks, 'combineTracks', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(combine, 'combine', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(mapToBackend, 'mapToBackend', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(removeTrack, 'removeTrack', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setEndDate, 'setEndDate', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setReviewOpportunityType, 'setReviewOpportunityType', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setStartDate, 'setStartDate', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setSubtracks, 'setSubtracks', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setTags, 'setTags', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(setText, 'setText', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/filter.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/challenge/filter.js?");
 
 /***/ }),
 
@@ -1126,7 +1126,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SORTS_DATA = exports.SORTS = undefined;\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _SORTS_DATA; /**\n                  * Collection of compare function to sort challenges in different ways.\n                  */\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\nvar SORTS = exports.SORTS = {\n  CURRENT_PHASE: 'current-phase',\n  MOST_RECENT: 'most-recent',\n  NUM_REGISTRANTS: 'num-registrants',\n  NUM_SUBMISSIONS: 'num-submissions',\n  PRIZE_HIGH_TO_LOW: 'prize-high-to-low',\n  TIME_TO_REGISTER: 'time-to-register',\n  TIME_TO_SUBMIT: 'time-to-submit',\n  TITLE_A_TO_Z: 'title-a-to-z',\n  REVIEW_OPPORTUNITIES_TITLE_A_TO_Z: 'review-opportunities-title-a-to-z',\n  REVIEW_OPPORTUNITIES_PAYMENT: 'review-opportunities-payment',\n  REVIEW_OPPORTUNITIES_START_DATE: 'review-opportunities-start-date'\n};\n\nvar SORTS_DATA = exports.SORTS_DATA = (_SORTS_DATA = {}, (0, _defineProperty3.default)(_SORTS_DATA, SORTS.CURRENT_PHASE, {\n  func: function func(a, b) {\n    return a.status.localeCompare(b.status);\n  },\n  name: 'Current phase'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.MOST_RECENT, {\n  func: function func(a, b) {\n    return (0, _moment2.default)(b.registrationStartDate).diff(a.registrationStartDate);\n  },\n  name: 'Most recent'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.NUM_REGISTRANTS, {\n  func: function func(a, b) {\n    return b.numRegistrants - a.numRegistrants;\n  },\n  name: '# of registrants'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.NUM_SUBMISSIONS, {\n  func: function func(a, b) {\n    return b.numSubmissions - a.numSubmissions;\n  },\n  name: '# of submissions'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.PRIZE_HIGH_TO_LOW, {\n  func: function func(a, b) {\n    return b.totalPrize - a.totalPrize;\n  },\n  name: 'Prize high to low'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.TIME_TO_REGISTER, {\n  func: function func(a, b) {\n    return (0, _moment2.default)(a.registrationEndDate || a.submissionEndDate).diff(b.registrationEndDate || b.submissionEndDate);\n  },\n  name: 'Time to register'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.TIME_TO_SUBMIT, {\n  func: function func(a, b) {\n    function nextSubEndDate(o) {\n      if (o.checkpointSubmissionEndDate && (0, _moment2.default)(o.checkpointSubmissionEndDate).isAfter()) {\n        return o.checkpointSubmissionEndDate;\n      }\n      return o.submissionEndDate;\n    }\n\n    var aDate = nextSubEndDate(a);\n    var bDate = nextSubEndDate(b);\n\n    if ((0, _moment2.default)(aDate).isBefore()) return 1;\n    if ((0, _moment2.default)(bDate).isBefore()) return -1;\n\n    return (0, _moment2.default)(aDate).diff(bDate);\n  },\n  name: 'Time to submit'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.TITLE_A_TO_Z, {\n  func: function func(a, b) {\n    return a.name.localeCompare(b.name);\n  },\n  name: 'Title A-Z'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.REVIEW_OPPORTUNITIES_TITLE_A_TO_Z, {\n  func: function func(a, b) {\n    return a.challenge.title.localeCompare(b.challenge.title);\n  },\n  name: 'Title A-Z'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.REVIEW_OPPORTUNITIES_PAYMENT, {\n  func: function func(a, b) {\n    return (0, _lodash.sumBy)(b.payments, 'payment') - (0, _lodash.sumBy)(a.payments, 'payment');\n  },\n  name: 'Payment'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.REVIEW_OPPORTUNITIES_START_DATE, {\n  // This will implicitly use moment#valueOf\n  func: function func(a, b) {\n    return (0, _moment2.default)(a.startDate) - (0, _moment2.default)(b.startDate);\n  },\n  name: 'Review start date'\n}), _SORTS_DATA);\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(SORTS, 'SORTS', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/sort.js');\n  reactHotLoader.register(SORTS_DATA, 'SORTS_DATA', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/challenge/sort.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/challenge/sort.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SORTS_DATA = exports.SORTS = undefined;\n\nvar _defineProperty2 = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"babel-runtime/helpers/defineProperty\");\n\nvar _defineProperty3 = _interopRequireDefault(_defineProperty2);\n\nvar _SORTS_DATA; /**\n                  * Collection of compare function to sort challenges in different ways.\n                  */\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\nvar SORTS = exports.SORTS = {\n  CURRENT_PHASE: 'current-phase',\n  MOST_RECENT: 'most-recent',\n  NUM_REGISTRANTS: 'num-registrants',\n  NUM_SUBMISSIONS: 'num-submissions',\n  PRIZE_HIGH_TO_LOW: 'prize-high-to-low',\n  TIME_TO_REGISTER: 'time-to-register',\n  TIME_TO_SUBMIT: 'time-to-submit',\n  TITLE_A_TO_Z: 'title-a-to-z',\n  REVIEW_OPPORTUNITIES_TITLE_A_TO_Z: 'review-opportunities-title-a-to-z',\n  REVIEW_OPPORTUNITIES_PAYMENT: 'review-opportunities-payment',\n  REVIEW_OPPORTUNITIES_START_DATE: 'review-opportunities-start-date'\n};\n\nvar SORTS_DATA = exports.SORTS_DATA = (_SORTS_DATA = {}, (0, _defineProperty3.default)(_SORTS_DATA, SORTS.CURRENT_PHASE, {\n  func: function func(a, b) {\n    return a.status.localeCompare(b.status);\n  },\n  name: 'Current phase'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.MOST_RECENT, {\n  func: function func(a, b) {\n    return (0, _moment2.default)(b.registrationStartDate).diff(a.registrationStartDate);\n  },\n  name: 'Most recent'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.NUM_REGISTRANTS, {\n  func: function func(a, b) {\n    return b.numRegistrants - a.numRegistrants;\n  },\n  name: '# of registrants'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.NUM_SUBMISSIONS, {\n  func: function func(a, b) {\n    return b.numSubmissions - a.numSubmissions;\n  },\n  name: '# of submissions'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.PRIZE_HIGH_TO_LOW, {\n  func: function func(a, b) {\n    return b.totalPrize - a.totalPrize;\n  },\n  name: 'Prize high to low'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.TIME_TO_REGISTER, {\n  func: function func(a, b) {\n    return (0, _moment2.default)(a.registrationEndDate || a.submissionEndDate).diff(b.registrationEndDate || b.submissionEndDate);\n  },\n  name: 'Time to register'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.TIME_TO_SUBMIT, {\n  func: function func(a, b) {\n    function nextSubEndDate(o) {\n      if (o.checkpointSubmissionEndDate && (0, _moment2.default)(o.checkpointSubmissionEndDate).isAfter()) {\n        return o.checkpointSubmissionEndDate;\n      }\n      return o.submissionEndDate;\n    }\n\n    var aDate = nextSubEndDate(a);\n    var bDate = nextSubEndDate(b);\n\n    if ((0, _moment2.default)(aDate).isBefore()) return 1;\n    if ((0, _moment2.default)(bDate).isBefore()) return -1;\n\n    return (0, _moment2.default)(aDate).diff(bDate);\n  },\n  name: 'Time to submit'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.TITLE_A_TO_Z, {\n  func: function func(a, b) {\n    return a.name.localeCompare(b.name);\n  },\n  name: 'Title A-Z'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.REVIEW_OPPORTUNITIES_TITLE_A_TO_Z, {\n  func: function func(a, b) {\n    return a.challenge.title.localeCompare(b.challenge.title);\n  },\n  name: 'Title A-Z'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.REVIEW_OPPORTUNITIES_PAYMENT, {\n  func: function func(a, b) {\n    return (0, _lodash.sumBy)(b.payments, 'payment') - (0, _lodash.sumBy)(a.payments, 'payment');\n  },\n  name: 'Payment'\n}), (0, _defineProperty3.default)(_SORTS_DATA, SORTS.REVIEW_OPPORTUNITIES_START_DATE, {\n  // This will implicitly use moment#valueOf\n  func: function func(a, b) {\n    return (0, _moment2.default)(a.startDate) - (0, _moment2.default)(b.startDate);\n  },\n  name: 'Review start date'\n}), _SORTS_DATA);\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(SORTS, 'SORTS', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/sort.js');\n  reactHotLoader.register(SORTS_DATA, 'SORTS_DATA', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/challenge/sort.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/challenge/sort.js?");
 
 /***/ }),
 
@@ -1138,7 +1138,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ERROR_ICON_TYPES = undefined;\n\nvar _setImmediate2 = __webpack_require__(/*! babel-runtime/core-js/set-immediate */ \"babel-runtime/core-js/set-immediate\");\n\nvar _setImmediate3 = _interopRequireDefault(_setImmediate2);\n\nexports.setErrorsStore = setErrorsStore;\nexports.fireErrorMessage = fireErrorMessage;\nexports.clearAllErrorIcons = clearAllErrorIcons;\nexports.setErrorIcon = setErrorIcon;\nexports.clearErrorIcon = clearErrorIcon;\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _errors = __webpack_require__(/*! ../actions/errors */ \"./src/actions/errors.js\");\n\nvar _errors2 = _interopRequireDefault(_errors);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module errors\n       * @desc Utility functions for the standard error handling.\n       * @todo They will be moved to `topcoder-react-utils` soon.\n       */\n\nvar ERROR_ICON_TYPES = exports.ERROR_ICON_TYPES = {\n  NETWORK: 'network',\n  API: 'api'\n};\n\nvar store = void 0; // Will be set only when rendering client-side\n\nfunction setErrorsStore(s) {\n  store = s;\n}\n\n/**\n * The function behaves similarly to javascript alert()\n * it will show a modal error diaglog with styling until the user clicks OK.\n */\nfunction fireErrorMessage(title, details) {\n  if (_topcoderReactUtils.isomorphy.isClientSide() && store) {\n    (0, _setImmediate3.default)(function () {\n      store.dispatch(_errors2.default.errors.newError(title, details));\n    });\n  }\n}\n\n/**\n * clear all error icons\n */\nfunction clearAllErrorIcons() {\n  if (_topcoderReactUtils.isomorphy.isClientSide() && store) {\n    (0, _setImmediate3.default)(function () {\n      store.dispatch(_errors2.default.errors.clearAllErrorIcons());\n    });\n  }\n}\n\n/**\n * add error message to error icon in bottom left in the screen.\n * @param id  id of error icon type (ERROR_ICON_TYPES.NETWORK or ERROR_ICON_TYPES.API)\n * @param title icon hover title\n * @param message icon hover message\n */\nfunction setErrorIcon(id, title, message) {\n  if (_topcoderReactUtils.isomorphy.isClientSide() && store) {\n    (0, _setImmediate3.default)(function () {\n      store.dispatch(_errors2.default.errors.setErrorIcon(id, title, message));\n    });\n  }\n}\n\n/**\n * clear all error message for an error icon.\n * @param id  id of error icon type to clear\n */\nfunction clearErrorIcon(id) {\n  if (_topcoderReactUtils.isomorphy.isClientSide() && store) {\n    (0, _setImmediate3.default)(function () {\n      store.dispatch(_errors2.default.errors.clearErrorIcon(id));\n    });\n  }\n}\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(ERROR_ICON_TYPES, 'ERROR_ICON_TYPES', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(store, 'store', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(setErrorsStore, 'setErrorsStore', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(fireErrorMessage, 'fireErrorMessage', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(clearAllErrorIcons, 'clearAllErrorIcons', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(setErrorIcon, 'setErrorIcon', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(clearErrorIcon, 'clearErrorIcon', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/errors.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/errors.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ERROR_ICON_TYPES = undefined;\n\nvar _setImmediate2 = __webpack_require__(/*! babel-runtime/core-js/set-immediate */ \"babel-runtime/core-js/set-immediate\");\n\nvar _setImmediate3 = _interopRequireDefault(_setImmediate2);\n\nexports.setErrorsStore = setErrorsStore;\nexports.fireErrorMessage = fireErrorMessage;\nexports.clearAllErrorIcons = clearAllErrorIcons;\nexports.setErrorIcon = setErrorIcon;\nexports.clearErrorIcon = clearErrorIcon;\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nvar _errors = __webpack_require__(/*! ../actions/errors */ \"./src/actions/errors.js\");\n\nvar _errors2 = _interopRequireDefault(_errors);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module errors\n       * @desc Utility functions for the standard error handling.\n       * @todo They will be moved to `topcoder-react-utils` soon.\n       */\n\nvar ERROR_ICON_TYPES = exports.ERROR_ICON_TYPES = {\n  NETWORK: 'network',\n  API: 'api'\n};\n\nvar store = void 0; // Will be set only when rendering client-side\n\nfunction setErrorsStore(s) {\n  store = s;\n}\n\n/**\n * The function behaves similarly to javascript alert()\n * it will show a modal error diaglog with styling until the user clicks OK.\n */\nfunction fireErrorMessage(title, details) {\n  if (_topcoderReactUtils.isomorphy.isClientSide() && store) {\n    (0, _setImmediate3.default)(function () {\n      store.dispatch(_errors2.default.errors.newError(title, details));\n    });\n  }\n}\n\n/**\n * clear all error icons\n */\nfunction clearAllErrorIcons() {\n  if (_topcoderReactUtils.isomorphy.isClientSide() && store) {\n    (0, _setImmediate3.default)(function () {\n      store.dispatch(_errors2.default.errors.clearAllErrorIcons());\n    });\n  }\n}\n\n/**\n * add error message to error icon in bottom left in the screen.\n * @param id  id of error icon type (ERROR_ICON_TYPES.NETWORK or ERROR_ICON_TYPES.API)\n * @param title icon hover title\n * @param message icon hover message\n */\nfunction setErrorIcon(id, title, message) {\n  if (_topcoderReactUtils.isomorphy.isClientSide() && store) {\n    (0, _setImmediate3.default)(function () {\n      store.dispatch(_errors2.default.errors.setErrorIcon(id, title, message));\n    });\n  }\n}\n\n/**\n * clear all error message for an error icon.\n * @param id  id of error icon type to clear\n */\nfunction clearErrorIcon(id) {\n  if (_topcoderReactUtils.isomorphy.isClientSide() && store) {\n    (0, _setImmediate3.default)(function () {\n      store.dispatch(_errors2.default.errors.clearErrorIcon(id));\n    });\n  }\n}\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(ERROR_ICON_TYPES, 'ERROR_ICON_TYPES', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(store, 'store', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(setErrorsStore, 'setErrorsStore', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(fireErrorMessage, 'fireErrorMessage', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(clearAllErrorIcons, 'clearAllErrorIcons', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(setErrorIcon, 'setErrorIcon', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/errors.js');\n  reactHotLoader.register(clearErrorIcon, 'clearErrorIcon', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/errors.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/errors.js?");
 
 /***/ }),
 
@@ -1150,7 +1150,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.url = exports.errors = exports.mock = exports.time = exports.tc = exports.logger = exports.challenge = undefined;\n\nvar _logger = __webpack_require__(/*! ./logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _tc = __webpack_require__(/*! ./tc */ \"./src/utils/tc.js\");\n\nvar tc = _interopRequireWildcard(_tc);\n\nvar _time = __webpack_require__(/*! ./time */ \"./src/utils/time.js\");\n\nvar time = _interopRequireWildcard(_time);\n\nvar _mock = __webpack_require__(/*! ./mock */ \"./src/utils/mock.js\");\n\nvar mock = _interopRequireWildcard(_mock);\n\nvar _errors = __webpack_require__(/*! ./errors */ \"./src/utils/errors.js\");\n\nvar errors = _interopRequireWildcard(_errors);\n\nvar _filter = __webpack_require__(/*! ./challenge/filter */ \"./src/utils/challenge/filter.js\");\n\nvar filter = _interopRequireWildcard(_filter);\n\nvar _buckets = __webpack_require__(/*! ./challenge/buckets */ \"./src/utils/challenge/buckets.js\");\n\nvar buckets = _interopRequireWildcard(_buckets);\n\nvar _sort = __webpack_require__(/*! ./challenge/sort */ \"./src/utils/challenge/sort.js\");\n\nvar sort = _interopRequireWildcard(_sort);\n\nvar _url = __webpack_require__(/*! ./url */ \"./src/utils/url.js\");\n\nvar url = _interopRequireWildcard(_url);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Export utils.\n       */\n\n\nvar challenge = {\n  filter: filter,\n  buckets: buckets,\n  sort: sort\n};\n\nexports.challenge = challenge;\nexports.logger = _logger2.default;\nexports.tc = tc;\nexports.time = time;\nexports.mock = mock;\nexports.errors = errors;\nexports.url = url;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(challenge, 'challenge', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/index.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/index.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.url = exports.errors = exports.mock = exports.time = exports.tc = exports.logger = exports.challenge = undefined;\n\nvar _logger = __webpack_require__(/*! ./logger */ \"./src/utils/logger.js\");\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _tc = __webpack_require__(/*! ./tc */ \"./src/utils/tc.js\");\n\nvar tc = _interopRequireWildcard(_tc);\n\nvar _time = __webpack_require__(/*! ./time */ \"./src/utils/time.js\");\n\nvar time = _interopRequireWildcard(_time);\n\nvar _mock = __webpack_require__(/*! ./mock */ \"./src/utils/mock.js\");\n\nvar mock = _interopRequireWildcard(_mock);\n\nvar _errors = __webpack_require__(/*! ./errors */ \"./src/utils/errors.js\");\n\nvar errors = _interopRequireWildcard(_errors);\n\nvar _filter = __webpack_require__(/*! ./challenge/filter */ \"./src/utils/challenge/filter.js\");\n\nvar filter = _interopRequireWildcard(_filter);\n\nvar _buckets = __webpack_require__(/*! ./challenge/buckets */ \"./src/utils/challenge/buckets.js\");\n\nvar buckets = _interopRequireWildcard(_buckets);\n\nvar _sort = __webpack_require__(/*! ./challenge/sort */ \"./src/utils/challenge/sort.js\");\n\nvar sort = _interopRequireWildcard(_sort);\n\nvar _url = __webpack_require__(/*! ./url */ \"./src/utils/url.js\");\n\nvar url = _interopRequireWildcard(_url);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Export utils.\n       */\n\n\nvar challenge = {\n  filter: filter,\n  buckets: buckets,\n  sort: sort\n};\n\nexports.challenge = challenge;\nexports.logger = _logger2.default;\nexports.tc = tc;\nexports.time = time;\nexports.mock = mock;\nexports.errors = errors;\nexports.url = url;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(challenge, 'challenge', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/index.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/index.js?");
 
 /***/ }),
 
@@ -1162,7 +1162,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module logger\n       *\n       * @desc\n       * Isomorphic logger.\n       *\n       * At the server-side it outputs log messages to the console, and also sends\n       * them to the https://logentries.com service (only if LOG_ENTRIES_TOKEN is\n       * set).\n       *\n       * At the front-end side it outputs log messages to the console (only when\n       * development build of the frontend is used), and sends them to the\n       * https://logentries.com service (both dev and prod build of the frontend\n       * send messages to the service, proxying them through the App's server;\n       * the proxy will forward them to the service only if LOG_ENTRIES_TOKEN is set).\n       *\n       * In all case, interface of the logger matches that of the standard JS console.\n       *\n       * @todo This module does not belong here, it should be moved to\n       * `topcoder-react-utils`.\n       */\n/* eslint-disable global-require */\n/* eslint-disable no-console */\n\n/* global fetch */\n\n\nvar logger = {};\n_lodash2.default.functions(console).forEach(function (func) {\n  logger[func] = _topcoderReactUtils.isomorphy.isDevBuild() || _topcoderReactUtils.isomorphy.isServerSide() ? console[func] : _lodash2.default.noop;\n});\n\nvar leLogger = void 0;\nif (_topcoderReactUtils.isomorphy.isServerSide()) {\n  var token = _topcoderReactUtils.config.LOG_ENTRIES_TOKEN;\n  if (token) {\n    var LeLogger = __webpack_require__(/*! le_node */ \"le_node\");\n    leLogger = new LeLogger({ token: token });\n  }\n} else {\n  var _log = function _log(type) {\n    for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      rest[_key - 1] = arguments[_key];\n    }\n\n    fetch('/community-app-assets/api/logger', {\n      body: (0, _stringify2.default)({\n        data: rest,\n        type: type\n      }),\n      headers: {\n        'Content-Type': 'application/json',\n        Authorization: 'ApiKey ' + _topcoderReactUtils.config.SERVER_API_KEY\n      },\n      method: 'POST'\n    }).catch(function () {\n      /* TODO: Network or server are down. We should msg it to the user somehow\n       */\n    });\n  };\n  leLogger = {\n    err: function err() {\n      for (var _len2 = arguments.length, rest = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        rest[_key2] = arguments[_key2];\n      }\n\n      return _log.apply(undefined, ['err'].concat(rest));\n    },\n    info: function info() {\n      for (var _len3 = arguments.length, rest = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        rest[_key3] = arguments[_key3];\n      }\n\n      return _log.apply(undefined, ['info'].concat(rest));\n    },\n    log: function log() {\n      for (var _len4 = arguments.length, rest = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        rest[_key4] = arguments[_key4];\n      }\n\n      return _log.apply(undefined, ['log'].concat(rest));\n    },\n    warning: function warning() {\n      for (var _len5 = arguments.length, rest = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        rest[_key5] = arguments[_key5];\n      }\n\n      return _log.apply(undefined, ['warn'].concat(rest));\n    }\n  };\n}\n\nif (leLogger) {\n  var extend = function extend(base, le) {\n    logger[base] = function () {\n      for (var _len6 = arguments.length, rest = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        rest[_key6] = arguments[_key6];\n      }\n\n      if (_topcoderReactUtils.isomorphy.isDevBuild() || _topcoderReactUtils.isomorphy.isServerSide()) {\n        var _console;\n\n        (_console = console)[base].apply(_console, rest);\n      }\n      var msg = '';\n      rest.forEach(function (item) {\n        var it = item;\n        if (!_lodash2.default.isString(it)) {\n          it = (0, _stringify2.default)(it);\n          if (!_lodash2.default.isString(it)) it = String(it);\n        }\n        msg = '' + msg + it + ' ';\n      });\n      leLogger[le](msg);\n    };\n  };\n  extend('error', 'err');\n  extend('info', 'info');\n  extend('log', 'log');\n  extend('warn', 'warning');\n}\n\nvar _default = logger;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(logger, 'logger', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/logger.js');\n  reactHotLoader.register(leLogger, 'leLogger', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/logger.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/logger.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/logger.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _stringify = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"babel-runtime/core-js/json/stringify\");\n\nvar _stringify2 = _interopRequireDefault(_stringify);\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module logger\n       *\n       * @desc\n       * Isomorphic logger.\n       *\n       * At the server-side it outputs log messages to the console, and also sends\n       * them to the https://logentries.com service (only if LOG_ENTRIES_TOKEN is\n       * set).\n       *\n       * At the front-end side it outputs log messages to the console (only when\n       * development build of the frontend is used), and sends them to the\n       * https://logentries.com service (both dev and prod build of the frontend\n       * send messages to the service, proxying them through the App's server;\n       * the proxy will forward them to the service only if LOG_ENTRIES_TOKEN is set).\n       *\n       * In all case, interface of the logger matches that of the standard JS console.\n       *\n       * @todo This module does not belong here, it should be moved to\n       * `topcoder-react-utils`.\n       */\n/* eslint-disable global-require */\n/* eslint-disable no-console */\n\n/* global fetch */\n\n\nvar logger = {};\n_lodash2.default.functions(console).forEach(function (func) {\n  logger[func] = _topcoderReactUtils.isomorphy.isDevBuild() || _topcoderReactUtils.isomorphy.isServerSide() ? console[func] : _lodash2.default.noop;\n});\n\nvar leLogger = void 0;\nif (_topcoderReactUtils.isomorphy.isServerSide()) {\n  var token = _topcoderReactUtils.config.LOG_ENTRIES_TOKEN;\n  if (token) {\n    var LeLogger = __webpack_require__(/*! le_node */ \"le_node\");\n    leLogger = new LeLogger({ token: token });\n  }\n} else {\n  var _log = function _log(type) {\n    for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      rest[_key - 1] = arguments[_key];\n    }\n\n    fetch('/community-app-assets/api/logger', {\n      body: (0, _stringify2.default)({\n        data: rest,\n        type: type\n      }),\n      headers: {\n        'Content-Type': 'application/json',\n        Authorization: 'ApiKey ' + _topcoderReactUtils.config.SERVER_API_KEY\n      },\n      method: 'POST'\n    }).catch(function () {\n      /* TODO: Network or server are down. We should msg it to the user somehow\n       */\n    });\n  };\n  leLogger = {\n    err: function err() {\n      for (var _len2 = arguments.length, rest = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        rest[_key2] = arguments[_key2];\n      }\n\n      return _log.apply(undefined, ['err'].concat(rest));\n    },\n    info: function info() {\n      for (var _len3 = arguments.length, rest = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        rest[_key3] = arguments[_key3];\n      }\n\n      return _log.apply(undefined, ['info'].concat(rest));\n    },\n    log: function log() {\n      for (var _len4 = arguments.length, rest = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        rest[_key4] = arguments[_key4];\n      }\n\n      return _log.apply(undefined, ['log'].concat(rest));\n    },\n    warning: function warning() {\n      for (var _len5 = arguments.length, rest = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        rest[_key5] = arguments[_key5];\n      }\n\n      return _log.apply(undefined, ['warn'].concat(rest));\n    }\n  };\n}\n\nif (leLogger) {\n  var extend = function extend(base, le) {\n    logger[base] = function () {\n      for (var _len6 = arguments.length, rest = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        rest[_key6] = arguments[_key6];\n      }\n\n      if (_topcoderReactUtils.isomorphy.isDevBuild() || _topcoderReactUtils.isomorphy.isServerSide()) {\n        var _console;\n\n        (_console = console)[base].apply(_console, rest);\n      }\n      var msg = '';\n      rest.forEach(function (item) {\n        var it = item;\n        if (!_lodash2.default.isString(it)) {\n          it = (0, _stringify2.default)(it);\n          if (!_lodash2.default.isString(it)) it = String(it);\n        }\n        msg = '' + msg + it + ' ';\n      });\n      leLogger[le](msg);\n    };\n  };\n  extend('error', 'err');\n  extend('info', 'info');\n  extend('log', 'log');\n  extend('warn', 'warning');\n}\n\nvar _default = logger;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(logger, 'logger', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/logger.js');\n  reactHotLoader.register(leLogger, 'leLogger', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/logger.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/logger.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/logger.js?");
 
 /***/ }),
 
@@ -1174,7 +1174,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mockAction = mockAction;\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\n/**\n * @module mock\n * @desc Collection of functions useful in unit tests.\n * @todo This will be moved to Jest utils in `topcoder-react-utils` soon.\n */\n\n/**\n * Creates a mock Flux Standard Action creator.\n * TODO: Additional options to set errors, etc. should be added.\n * TODO: It may be handier to return action created wrapped into Jest mock\n *  function.\n * @param {String} type Action type.\n * @param {Any} payload Action payload.\n * @param {Any} error Has error or not.\n */\nfunction mockAction(type, payload, error) {\n  var res = function res() {\n    return { type: type, payload: payload, error: error };\n  };\n  res.toString = function () {\n    return type;\n  };\n  return res;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(mockAction, \"mockAction\", \"/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/mock.js\");\n  reactHotLoader.register(_default, \"default\", \"/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/mock.js\");\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/mock.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.mockAction = mockAction;\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})();\n\n/**\n * @module mock\n * @desc Collection of functions useful in unit tests.\n * @todo This will be moved to Jest utils in `topcoder-react-utils` soon.\n */\n\n/**\n * Creates a mock Flux Standard Action creator.\n * TODO: Additional options to set errors, etc. should be added.\n * TODO: It may be handier to return action created wrapped into Jest mock\n *  function.\n * @param {String} type Action type.\n * @param {Any} payload Action payload.\n * @param {Any} error Has error or not.\n */\nfunction mockAction(type, payload, error) {\n  var res = function res() {\n    return { type: type, payload: payload, error: error };\n  };\n  res.toString = function () {\n    return type;\n  };\n  return res;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(mockAction, \"mockAction\", \"/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/mock.js\");\n  reactHotLoader.register(_default, \"default\", \"/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/mock.js\");\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/mock.js?");
 
 /***/ }),
 
@@ -1186,7 +1186,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getLookerApiResponsePayload = exports.getApiResponsePayload = exports.REVIEW_OPPORTUNITY_TYPES = exports.COMPETITION_TRACKS = undefined;\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Gets payload from a standard success response from TC API; or throws\n * an error in case of a failure response.\n * @param {Object} res\n * @return {Promise} Resolves to the payload.\n */\nvar getApiResponsePayload = exports.getApiResponsePayload = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(res) {\n    var x;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            if (res.ok) {\n              _context.next = 2;\n              break;\n            }\n\n            throw new Error(res.statusText);\n\n          case 2:\n            _context.next = 4;\n            return res.json();\n\n          case 4:\n            x = _context.sent.result;\n\n            if (x.success) {\n              _context.next = 7;\n              break;\n            }\n\n            throw new Error(x.content);\n\n          case 7:\n            return _context.abrupt('return', x.content);\n\n          case 8:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function getApiResponsePayload(_x) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * Gets payload from a standard success response from TC LOOKER API; or throws\n * an error in case of a failure response.\n * @param {Object} res\n * @return {Promise} Resolves to the payload.\n */\n\n\nvar getLookerApiResponsePayload = exports.getLookerApiResponsePayload = function () {\n  var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(res) {\n    var resJson, x;\n    return _regenerator2.default.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return res.json();\n\n          case 2:\n            resJson = _context2.sent;\n\n            if (!Array.isArray(resJson)) {\n              _context2.next = 5;\n              break;\n            }\n\n            return _context2.abrupt('return', {\n              res: resJson,\n              error: false\n            });\n\n          case 5:\n            x = resJson.result;\n            return _context2.abrupt('return', {\n              res: x.content,\n              error: !x.success,\n              status: x.status\n            });\n\n          case 7:\n          case 'end':\n            return _context2.stop();\n        }\n      }\n    }, _callee2, this);\n  }));\n\n  return function getLookerApiResponsePayload(_x2) {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\n/**\n * process srm to populate additional infomation\n * adopt from topcoder-app repo\n * @param  {Object} s  srm to process\n * @return {Object}    processed srm\n */\n\n\nexports.processSRM = processSRM;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module tc\n       * @desc Collection of small Topcoder-related functions.\n       * @todo More TC-related utils should be moved here from Community-app.\n       */\n\n/**\n * Codes of the Topcoder communities.\n */\n/* TODO: These are originally motivated by Topcoder API v2. Topcoder API v3\n * uses upper-case literals to encode the tracks. At some point, we should\n * update it in this code as well! */\nvar COMPETITION_TRACKS = exports.COMPETITION_TRACKS = {\n  DATA_SCIENCE: 'data_science',\n  DESIGN: 'design',\n  DEVELOP: 'develop'\n};\n\n/**\n * Review Opportunity types\n */\nvar REVIEW_OPPORTUNITY_TYPES = exports.REVIEW_OPPORTUNITY_TYPES = {\n  'Contest Review': 'Review',\n  'Spec Review': 'Specification Review',\n  'Iterative Review': 'Iterative Review'\n};function processSRM(s) {\n  var srm = _lodash2.default.cloneDeep(s);\n  srm.userStatus = 'registered';\n  if (Array.isArray(srm.rounds) && srm.rounds.length) {\n    if (srm.rounds[0].userSRMDetails && srm.rounds[0].userSRMDetails.rated) {\n      srm.result = srm.rounds[0].userSRMDetails;\n    }\n    if (srm.rounds[0].codingStartAt) {\n      srm.codingStartAt = srm.rounds[0].codingStartAt;\n    }\n    if (srm.rounds[0].codingEndAt) {\n      srm.codingEndAt = srm.rounds[0].codingEndAt;\n    }\n    if (srm.rounds[0].registrationStartAt) {\n      srm.registrationStartAt = srm.rounds[0].registrationStartAt;\n    }\n    if (srm.rounds[0].registrationEndAt) {\n      srm.registrationEndAt = srm.rounds[0].registrationEndAt;\n    }\n  }\n\n  // determines if the current phase is registration\n  var start = (0, _moment2.default)(srm.registrationStartAt).unix();\n  var end = (0, _moment2.default)(srm.registrationEndAt).unix();\n  var now = (0, _moment2.default)().unix();\n  if (start <= now && end >= now) {\n    srm.currentPhase = 'REGISTRATION';\n  }\n  // determines if the current phase is coding\n  start = (0, _moment2.default)(srm.codingStartAt).unix();\n  end = (0, _moment2.default)(srm.codingEndAt).unix();\n  now = (0, _moment2.default)().unix();\n  if (start <= now && end >= now) {\n    srm.currentPhase = 'CODING';\n  }\n  return srm;\n}\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(COMPETITION_TRACKS, 'COMPETITION_TRACKS', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/tc.js');\n  reactHotLoader.register(REVIEW_OPPORTUNITY_TYPES, 'REVIEW_OPPORTUNITY_TYPES', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/tc.js');\n  reactHotLoader.register(getApiResponsePayload, 'getApiResponsePayload', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/tc.js');\n  reactHotLoader.register(getLookerApiResponsePayload, 'getLookerApiResponsePayload', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/tc.js');\n  reactHotLoader.register(processSRM, 'processSRM', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/tc.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/tc.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getLookerApiResponsePayload = exports.getApiResponsePayload = exports.REVIEW_OPPORTUNITY_TYPES = exports.COMPETITION_TRACKS = undefined;\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Gets payload from a standard success response from TC API; or throws\n * an error in case of a failure response.\n * @param {Object} res\n * @return {Promise} Resolves to the payload.\n */\nvar getApiResponsePayload = exports.getApiResponsePayload = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(res) {\n    var x;\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            if (res.ok) {\n              _context.next = 2;\n              break;\n            }\n\n            throw new Error(res.statusText);\n\n          case 2:\n            _context.next = 4;\n            return res.json();\n\n          case 4:\n            x = _context.sent.result;\n\n            if (x.success) {\n              _context.next = 7;\n              break;\n            }\n\n            throw new Error(x.content);\n\n          case 7:\n            return _context.abrupt('return', x.content);\n\n          case 8:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function getApiResponsePayload(_x) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * Gets payload from a standard success response from TC LOOKER API; or throws\n * an error in case of a failure response.\n * @param {Object} res\n * @return {Promise} Resolves to the payload.\n */\n\n\nvar getLookerApiResponsePayload = exports.getLookerApiResponsePayload = function () {\n  var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(res) {\n    var resJson, x;\n    return _regenerator2.default.wrap(function _callee2$(_context2) {\n      while (1) {\n        switch (_context2.prev = _context2.next) {\n          case 0:\n            _context2.next = 2;\n            return res.json();\n\n          case 2:\n            resJson = _context2.sent;\n\n            if (!Array.isArray(resJson)) {\n              _context2.next = 5;\n              break;\n            }\n\n            return _context2.abrupt('return', {\n              res: resJson,\n              error: false\n            });\n\n          case 5:\n            x = resJson.result;\n            return _context2.abrupt('return', {\n              res: x.content,\n              error: !x.success,\n              status: x.status\n            });\n\n          case 7:\n          case 'end':\n            return _context2.stop();\n        }\n      }\n    }, _callee2, this);\n  }));\n\n  return function getLookerApiResponsePayload(_x2) {\n    return _ref2.apply(this, arguments);\n  };\n}();\n\n/**\n * process srm to populate additional infomation\n * adopt from topcoder-app repo\n * @param  {Object} s  srm to process\n * @return {Object}    processed srm\n */\n\n\nexports.processSRM = processSRM;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module tc\n       * @desc Collection of small Topcoder-related functions.\n       * @todo More TC-related utils should be moved here from Community-app.\n       */\n\n/**\n * Codes of the Topcoder communities.\n */\n/* TODO: These are originally motivated by Topcoder API v2. Topcoder API v3\n * uses upper-case literals to encode the tracks. At some point, we should\n * update it in this code as well! */\nvar COMPETITION_TRACKS = exports.COMPETITION_TRACKS = {\n  DATA_SCIENCE: 'data_science',\n  DESIGN: 'design',\n  DEVELOP: 'develop'\n};\n\n/**\n * Review Opportunity types\n */\nvar REVIEW_OPPORTUNITY_TYPES = exports.REVIEW_OPPORTUNITY_TYPES = {\n  'Contest Review': 'Review',\n  'Spec Review': 'Specification Review',\n  'Iterative Review': 'Iterative Review'\n};function processSRM(s) {\n  var srm = _lodash2.default.cloneDeep(s);\n  srm.userStatus = 'registered';\n  if (Array.isArray(srm.rounds) && srm.rounds.length) {\n    if (srm.rounds[0].userSRMDetails && srm.rounds[0].userSRMDetails.rated) {\n      srm.result = srm.rounds[0].userSRMDetails;\n    }\n    if (srm.rounds[0].codingStartAt) {\n      srm.codingStartAt = srm.rounds[0].codingStartAt;\n    }\n    if (srm.rounds[0].codingEndAt) {\n      srm.codingEndAt = srm.rounds[0].codingEndAt;\n    }\n    if (srm.rounds[0].registrationStartAt) {\n      srm.registrationStartAt = srm.rounds[0].registrationStartAt;\n    }\n    if (srm.rounds[0].registrationEndAt) {\n      srm.registrationEndAt = srm.rounds[0].registrationEndAt;\n    }\n  }\n\n  // determines if the current phase is registration\n  var start = (0, _moment2.default)(srm.registrationStartAt).unix();\n  var end = (0, _moment2.default)(srm.registrationEndAt).unix();\n  var now = (0, _moment2.default)().unix();\n  if (start <= now && end >= now) {\n    srm.currentPhase = 'REGISTRATION';\n  }\n  // determines if the current phase is coding\n  start = (0, _moment2.default)(srm.codingStartAt).unix();\n  end = (0, _moment2.default)(srm.codingEndAt).unix();\n  now = (0, _moment2.default)().unix();\n  if (start <= now && end >= now) {\n    srm.currentPhase = 'CODING';\n  }\n  return srm;\n}\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(COMPETITION_TRACKS, 'COMPETITION_TRACKS', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/tc.js');\n  reactHotLoader.register(REVIEW_OPPORTUNITY_TYPES, 'REVIEW_OPPORTUNITY_TYPES', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/tc.js');\n  reactHotLoader.register(getApiResponsePayload, 'getApiResponsePayload', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/tc.js');\n  reactHotLoader.register(getLookerApiResponsePayload, 'getLookerApiResponsePayload', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/tc.js');\n  reactHotLoader.register(processSRM, 'processSRM', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/tc.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/tc.js?");
 
 /***/ }),
 
@@ -1198,7 +1198,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.formatDuration = exports.delay = undefined;\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Returns a Promise that resolves after the specified delay.\n * @param {Number} time Delay [ms].\n * @return {Promise}\n */\nvar delay = exports.delay = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(time) {\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            return _context.abrupt('return', new _promise2.default(function (resolve) {\n              return setTimeout(function () {\n                return resolve();\n              }, time);\n            }));\n\n          case 1:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function delay(_x) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * Standard duration formatting for listings and details\n *\n * @param {Number} time Time in milliseconds\n * @return {String} Formatted duration\n */\n\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\n__webpack_require__(/*! moment-duration-format */ \"moment-duration-format\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module time\n       * @desc Utility functions for time/date related stuff\n       */\n\n\nvar HOUR_MS = 60 * 60 * 1000;\nvar DAY_MS = 24 * HOUR_MS;var formatDuration = exports.formatDuration = function formatDuration(time) {\n  var format = void 0;\n  if (time > DAY_MS) format = 'D[d] H[h]';else if (time > HOUR_MS) format = 'H[h] m[min]';else format = 'm[min] s[s]';\n\n  return _moment2.default.duration(time).format(format);\n};\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(HOUR_MS, 'HOUR_MS', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/time.js');\n  reactHotLoader.register(DAY_MS, 'DAY_MS', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/time.js');\n  reactHotLoader.register(delay, 'delay', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/time.js');\n  reactHotLoader.register(formatDuration, 'formatDuration', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/time.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/time.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/time.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.formatDuration = exports.delay = undefined;\n\nvar _regenerator = __webpack_require__(/*! babel-runtime/regenerator */ \"babel-runtime/regenerator\");\n\nvar _regenerator2 = _interopRequireDefault(_regenerator);\n\nvar _promise = __webpack_require__(/*! babel-runtime/core-js/promise */ \"babel-runtime/core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nvar _asyncToGenerator2 = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"babel-runtime/helpers/asyncToGenerator\");\n\nvar _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);\n\n/**\n * Returns a Promise that resolves after the specified delay.\n * @param {Number} time Delay [ms].\n * @return {Promise}\n */\nvar delay = exports.delay = function () {\n  var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(time) {\n    return _regenerator2.default.wrap(function _callee$(_context) {\n      while (1) {\n        switch (_context.prev = _context.next) {\n          case 0:\n            return _context.abrupt('return', new _promise2.default(function (resolve) {\n              return setTimeout(function () {\n                return resolve();\n              }, time);\n            }));\n\n          case 1:\n          case 'end':\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function delay(_x) {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * Standard duration formatting for listings and details\n *\n * @param {Number} time Time in milliseconds\n * @return {String} Formatted duration\n */\n\n\nvar _moment = __webpack_require__(/*! moment */ \"moment\");\n\nvar _moment2 = _interopRequireDefault(_moment);\n\n__webpack_require__(/*! moment-duration-format */ \"moment-duration-format\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * @module time\n       * @desc Utility functions for time/date related stuff\n       */\n\n\nvar HOUR_MS = 60 * 60 * 1000;\nvar DAY_MS = 24 * HOUR_MS;var formatDuration = exports.formatDuration = function formatDuration(time) {\n  var format = void 0;\n  if (time > DAY_MS) format = 'D[d] H[h]';else if (time > HOUR_MS) format = 'H[h] m[min]';else format = 'm[min] s[s]';\n\n  return _moment2.default.duration(time).format(format);\n};\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(HOUR_MS, 'HOUR_MS', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/time.js');\n  reactHotLoader.register(DAY_MS, 'DAY_MS', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/time.js');\n  reactHotLoader.register(delay, 'delay', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/time.js');\n  reactHotLoader.register(formatDuration, 'formatDuration', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/time.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/time.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/time.js?");
 
 /***/ }),
 
@@ -1210,7 +1210,7 @@ eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(ex
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.updateQuery = updateQuery;\nexports.removeTrailingSlash = removeTrailingSlash;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Various URL-related functions.\n       */\n\n/* global window */\n\n/**\n * If executed client-side (determined in this case by the presence of global\n * window object), this function updates query section of URL; otherwise does\n * nothing.\n * @param {Object} update Specifies the update to make. Current query will be\n *  parsed into JS object, then update will be merged into that object, and the\n *  result will be pushed back to the query section of URL. I.e. to unset some\n *  field of the query, that field should be explicitely mentioned inside\n *  'update' as undefined.\n */\nfunction updateQuery(update) {\n  if (_topcoderReactUtils.isomorphy.isServerSide()) return;\n\n  var query = _qs2.default.parse(window.location.search.slice(1));\n\n  /* _.merge won't work here, because it just ignores the fields explicitely\n   * set as undefined in the objects to be merged, rather than deleting such\n   * fields in the target object. */\n  _lodash2.default.forIn(update, function (value, key) {\n    if (_lodash2.default.isUndefined(value)) delete query[key];else query[key] = value;\n  });\n  query = '?' + _qs2.default.stringify(query, { encodeValuesOnly: true });\n  window.history.replaceState(window.history.state, '', query);\n}\n\n/**\n * Cleans/removes trailing slash from url\n *\n * @param  {String} url The url to clean\n * @return {String}\n */\nfunction removeTrailingSlash(url) {\n  return url.charAt(url.length - 1) === '/' ? url.slice(0, -1) : url;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(updateQuery, 'updateQuery', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/url.js');\n  reactHotLoader.register(removeTrailingSlash, 'removeTrailingSlash', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/url.js');\n  reactHotLoader.register(_default, 'default', '/Users/hy/top/community/filter4/topcoder-react-lib/src/utils/url.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/url.js?");
+eval("/* WEBPACK VAR INJECTION */(function(module) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.updateQuery = updateQuery;\nexports.removeTrailingSlash = removeTrailingSlash;\n\nvar _lodash = __webpack_require__(/*! lodash */ \"lodash\");\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _qs = __webpack_require__(/*! qs */ \"qs\");\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _topcoderReactUtils = __webpack_require__(/*! topcoder-react-utils */ \"topcoder-react-utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function () {\n  var enterModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").enterModule;\n\n  enterModule && enterModule(module);\n})(); /**\n       * Various URL-related functions.\n       */\n\n/* global window */\n\n/**\n * If executed client-side (determined in this case by the presence of global\n * window object), this function updates query section of URL; otherwise does\n * nothing.\n * @param {Object} update Specifies the update to make. Current query will be\n *  parsed into JS object, then update will be merged into that object, and the\n *  result will be pushed back to the query section of URL. I.e. to unset some\n *  field of the query, that field should be explicitely mentioned inside\n *  'update' as undefined.\n */\nfunction updateQuery(update) {\n  if (_topcoderReactUtils.isomorphy.isServerSide()) return;\n\n  var query = _qs2.default.parse(window.location.search.slice(1));\n\n  /* _.merge won't work here, because it just ignores the fields explicitely\n   * set as undefined in the objects to be merged, rather than deleting such\n   * fields in the target object. */\n  _lodash2.default.forIn(update, function (value, key) {\n    if (_lodash2.default.isUndefined(value)) delete query[key];else query[key] = value;\n  });\n  query = '?' + _qs2.default.stringify(query, { encodeValuesOnly: true });\n  window.history.replaceState(window.history.state, '', query);\n}\n\n/**\n * Cleans/removes trailing slash from url\n *\n * @param  {String} url The url to clean\n * @return {String}\n */\nfunction removeTrailingSlash(url) {\n  return url.charAt(url.length - 1) === '/' ? url.slice(0, -1) : url;\n}\n\nvar _default = undefined;\nexports.default = _default;\n;\n\n(function () {\n  var reactHotLoader = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").default;\n\n  var leaveModule = __webpack_require__(/*! react-hot-loader */ \"react-hot-loader\").leaveModule;\n\n  if (!reactHotLoader) {\n    return;\n  }\n\n  reactHotLoader.register(updateQuery, 'updateQuery', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/url.js');\n  reactHotLoader.register(removeTrailingSlash, 'removeTrailingSlash', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/url.js');\n  reactHotLoader.register(_default, 'default', '/Users/thomaskranitsas/Desktop/topcoder-react-lib/src/utils/url.js');\n  leaveModule(module);\n})();\n\n;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack://topcoder-react-lib/./src/utils/url.js?");
 
 /***/ }),
 
diff --git a/package-lock.json b/package-lock.json
index 56e5818f..5ec4c684 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "topcoder-react-lib",
-  "version": "0.7.16",
+  "version": "0.7.16-1",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
     "@babel/code-frame": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
       "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
       "dev": true,
       "requires": {
@@ -19,20 +19,20 @@
       "integrity": "sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "7.0.0",
-        "@babel/generator": "7.1.3",
-        "@babel/helpers": "7.1.2",
-        "@babel/parser": "7.1.3",
-        "@babel/template": "7.1.2",
-        "@babel/traverse": "7.1.4",
-        "@babel/types": "7.1.3",
-        "convert-source-map": "1.6.0",
-        "debug": "3.2.6",
-        "json5": "0.5.1",
-        "lodash": "4.17.11",
-        "resolve": "1.8.1",
-        "semver": "5.6.0",
-        "source-map": "0.5.7"
+        "@babel/code-frame": "^7.0.0",
+        "@babel/generator": "^7.1.2",
+        "@babel/helpers": "^7.1.2",
+        "@babel/parser": "^7.1.2",
+        "@babel/template": "^7.1.2",
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.1.2",
+        "convert-source-map": "^1.1.0",
+        "debug": "^3.1.0",
+        "json5": "^0.5.0",
+        "lodash": "^4.17.10",
+        "resolve": "^1.3.2",
+        "semver": "^5.4.1",
+        "source-map": "^0.5.0"
       },
       "dependencies": {
         "@babel/code-frame": {
@@ -41,7 +41,7 @@
           "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
           "dev": true,
           "requires": {
-            "@babel/highlight": "7.0.0"
+            "@babel/highlight": "^7.0.0"
           }
         },
         "@babel/generator": {
@@ -50,11 +50,11 @@
           "integrity": "sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ==",
           "dev": true,
           "requires": {
-            "@babel/types": "7.1.3",
-            "jsesc": "2.5.1",
-            "lodash": "4.17.11",
-            "source-map": "0.5.7",
-            "trim-right": "1.0.1"
+            "@babel/types": "^7.1.3",
+            "jsesc": "^2.5.1",
+            "lodash": "^4.17.10",
+            "source-map": "^0.5.0",
+            "trim-right": "^1.0.1"
           }
         },
         "@babel/helper-function-name": {
@@ -63,9 +63,9 @@
           "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
           "dev": true,
           "requires": {
-            "@babel/helper-get-function-arity": "7.0.0",
-            "@babel/template": "7.1.2",
-            "@babel/types": "7.1.3"
+            "@babel/helper-get-function-arity": "^7.0.0",
+            "@babel/template": "^7.1.0",
+            "@babel/types": "^7.0.0"
           }
         },
         "@babel/helper-get-function-arity": {
@@ -74,7 +74,7 @@
           "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
           "dev": true,
           "requires": {
-            "@babel/types": "7.1.3"
+            "@babel/types": "^7.0.0"
           }
         },
         "@babel/helper-split-export-declaration": {
@@ -83,7 +83,7 @@
           "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
           "dev": true,
           "requires": {
-            "@babel/types": "7.1.3"
+            "@babel/types": "^7.0.0"
           }
         },
         "@babel/highlight": {
@@ -92,9 +92,9 @@
           "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.1",
-            "esutils": "2.0.2",
-            "js-tokens": "4.0.0"
+            "chalk": "^2.0.0",
+            "esutils": "^2.0.2",
+            "js-tokens": "^4.0.0"
           }
         },
         "@babel/template": {
@@ -103,9 +103,9 @@
           "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==",
           "dev": true,
           "requires": {
-            "@babel/code-frame": "7.0.0",
-            "@babel/parser": "7.1.3",
-            "@babel/types": "7.1.3"
+            "@babel/code-frame": "^7.0.0",
+            "@babel/parser": "^7.1.2",
+            "@babel/types": "^7.1.2"
           }
         },
         "@babel/traverse": {
@@ -114,15 +114,15 @@
           "integrity": "sha512-my9mdrAIGdDiSVBuMjpn/oXYpva0/EZwWL3sm3Wcy/AVWO2eXnsoZruOT9jOGNRXU8KbCIu5zsKnXcAJ6PcV6Q==",
           "dev": true,
           "requires": {
-            "@babel/code-frame": "7.0.0",
-            "@babel/generator": "7.1.3",
-            "@babel/helper-function-name": "7.1.0",
-            "@babel/helper-split-export-declaration": "7.0.0",
-            "@babel/parser": "7.1.3",
-            "@babel/types": "7.1.3",
-            "debug": "3.2.6",
-            "globals": "11.8.0",
-            "lodash": "4.17.11"
+            "@babel/code-frame": "^7.0.0",
+            "@babel/generator": "^7.1.3",
+            "@babel/helper-function-name": "^7.1.0",
+            "@babel/helper-split-export-declaration": "^7.0.0",
+            "@babel/parser": "^7.1.3",
+            "@babel/types": "^7.1.3",
+            "debug": "^3.1.0",
+            "globals": "^11.1.0",
+            "lodash": "^4.17.10"
           }
         },
         "@babel/types": {
@@ -131,9 +131,9 @@
           "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==",
           "dev": true,
           "requires": {
-            "esutils": "2.0.2",
-            "lodash": "4.17.11",
-            "to-fast-properties": "2.0.0"
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.10",
+            "to-fast-properties": "^2.0.0"
           }
         },
         "debug": {
@@ -142,7 +142,7 @@
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "globals": {
@@ -185,15 +185,15 @@
     },
     "@babel/generator": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz",
       "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==",
       "dev": true,
       "requires": {
         "@babel/types": "7.0.0-beta.44",
-        "jsesc": "2.5.1",
-        "lodash": "4.17.11",
-        "source-map": "0.5.7",
-        "trim-right": "1.0.1"
+        "jsesc": "^2.5.1",
+        "lodash": "^4.2.0",
+        "source-map": "^0.5.0",
+        "trim-right": "^1.0.1"
       },
       "dependencies": {
         "jsesc": {
@@ -212,7 +212,7 @@
     },
     "@babel/helper-function-name": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz",
       "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==",
       "dev": true,
       "requires": {
@@ -223,7 +223,7 @@
     },
     "@babel/helper-get-function-arity": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz",
       "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==",
       "dev": true,
       "requires": {
@@ -232,7 +232,7 @@
     },
     "@babel/helper-split-export-declaration": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz",
       "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==",
       "dev": true,
       "requires": {
@@ -245,9 +245,9 @@
       "integrity": "sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA==",
       "dev": true,
       "requires": {
-        "@babel/template": "7.1.2",
-        "@babel/traverse": "7.1.4",
-        "@babel/types": "7.1.3"
+        "@babel/template": "^7.1.2",
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.1.2"
       },
       "dependencies": {
         "@babel/code-frame": {
@@ -256,7 +256,7 @@
           "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
           "dev": true,
           "requires": {
-            "@babel/highlight": "7.0.0"
+            "@babel/highlight": "^7.0.0"
           }
         },
         "@babel/generator": {
@@ -265,11 +265,11 @@
           "integrity": "sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ==",
           "dev": true,
           "requires": {
-            "@babel/types": "7.1.3",
-            "jsesc": "2.5.1",
-            "lodash": "4.17.11",
-            "source-map": "0.5.7",
-            "trim-right": "1.0.1"
+            "@babel/types": "^7.1.3",
+            "jsesc": "^2.5.1",
+            "lodash": "^4.17.10",
+            "source-map": "^0.5.0",
+            "trim-right": "^1.0.1"
           }
         },
         "@babel/helper-function-name": {
@@ -278,9 +278,9 @@
           "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
           "dev": true,
           "requires": {
-            "@babel/helper-get-function-arity": "7.0.0",
-            "@babel/template": "7.1.2",
-            "@babel/types": "7.1.3"
+            "@babel/helper-get-function-arity": "^7.0.0",
+            "@babel/template": "^7.1.0",
+            "@babel/types": "^7.0.0"
           }
         },
         "@babel/helper-get-function-arity": {
@@ -289,7 +289,7 @@
           "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
           "dev": true,
           "requires": {
-            "@babel/types": "7.1.3"
+            "@babel/types": "^7.0.0"
           }
         },
         "@babel/helper-split-export-declaration": {
@@ -298,7 +298,7 @@
           "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
           "dev": true,
           "requires": {
-            "@babel/types": "7.1.3"
+            "@babel/types": "^7.0.0"
           }
         },
         "@babel/highlight": {
@@ -307,9 +307,9 @@
           "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.1",
-            "esutils": "2.0.2",
-            "js-tokens": "4.0.0"
+            "chalk": "^2.0.0",
+            "esutils": "^2.0.2",
+            "js-tokens": "^4.0.0"
           }
         },
         "@babel/template": {
@@ -318,9 +318,9 @@
           "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==",
           "dev": true,
           "requires": {
-            "@babel/code-frame": "7.0.0",
-            "@babel/parser": "7.1.3",
-            "@babel/types": "7.1.3"
+            "@babel/code-frame": "^7.0.0",
+            "@babel/parser": "^7.1.2",
+            "@babel/types": "^7.1.2"
           }
         },
         "@babel/traverse": {
@@ -329,15 +329,15 @@
           "integrity": "sha512-my9mdrAIGdDiSVBuMjpn/oXYpva0/EZwWL3sm3Wcy/AVWO2eXnsoZruOT9jOGNRXU8KbCIu5zsKnXcAJ6PcV6Q==",
           "dev": true,
           "requires": {
-            "@babel/code-frame": "7.0.0",
-            "@babel/generator": "7.1.3",
-            "@babel/helper-function-name": "7.1.0",
-            "@babel/helper-split-export-declaration": "7.0.0",
-            "@babel/parser": "7.1.3",
-            "@babel/types": "7.1.3",
-            "debug": "3.2.6",
-            "globals": "11.8.0",
-            "lodash": "4.17.11"
+            "@babel/code-frame": "^7.0.0",
+            "@babel/generator": "^7.1.3",
+            "@babel/helper-function-name": "^7.1.0",
+            "@babel/helper-split-export-declaration": "^7.0.0",
+            "@babel/parser": "^7.1.3",
+            "@babel/types": "^7.1.3",
+            "debug": "^3.1.0",
+            "globals": "^11.1.0",
+            "lodash": "^4.17.10"
           }
         },
         "@babel/types": {
@@ -346,9 +346,9 @@
           "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==",
           "dev": true,
           "requires": {
-            "esutils": "2.0.2",
-            "lodash": "4.17.11",
-            "to-fast-properties": "2.0.0"
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.10",
+            "to-fast-properties": "^2.0.0"
           }
         },
         "debug": {
@@ -357,7 +357,7 @@
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "globals": {
@@ -388,13 +388,13 @@
     },
     "@babel/highlight": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
       "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "esutils": "2.0.2",
-        "js-tokens": "3.0.2"
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.0"
       },
       "dependencies": {
         "js-tokens": {
@@ -416,7 +416,7 @@
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.2.tgz",
       "integrity": "sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA==",
       "requires": {
-        "regenerator-runtime": "0.13.2"
+        "regenerator-runtime": "^0.13.2"
       },
       "dependencies": {
         "regenerator-runtime": {
@@ -428,19 +428,19 @@
     },
     "@babel/template": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz",
       "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "7.0.0-beta.44",
         "@babel/types": "7.0.0-beta.44",
         "babylon": "7.0.0-beta.44",
-        "lodash": "4.17.11"
+        "lodash": "^4.2.0"
       },
       "dependencies": {
         "babylon": {
           "version": "7.0.0-beta.44",
-          "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+          "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
           "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
           "dev": true
         }
@@ -448,7 +448,7 @@
     },
     "@babel/traverse": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz",
       "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==",
       "dev": true,
       "requires": {
@@ -458,15 +458,15 @@
         "@babel/helper-split-export-declaration": "7.0.0-beta.44",
         "@babel/types": "7.0.0-beta.44",
         "babylon": "7.0.0-beta.44",
-        "debug": "3.2.6",
-        "globals": "11.8.0",
-        "invariant": "2.2.4",
-        "lodash": "4.17.11"
+        "debug": "^3.1.0",
+        "globals": "^11.1.0",
+        "invariant": "^2.2.0",
+        "lodash": "^4.2.0"
       },
       "dependencies": {
         "babylon": {
           "version": "7.0.0-beta.44",
-          "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+          "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
           "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
           "dev": true
         },
@@ -476,7 +476,7 @@
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "globals": {
@@ -489,13 +489,13 @@
     },
     "@babel/types": {
       "version": "7.0.0-beta.44",
-      "resolved": "http://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz",
       "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==",
       "dev": true,
       "requires": {
-        "esutils": "2.0.2",
-        "lodash": "4.17.11",
-        "to-fast-properties": "2.0.0"
+        "esutils": "^2.0.2",
+        "lodash": "^4.2.0",
+        "to-fast-properties": "^2.0.0"
       },
       "dependencies": {
         "to-fast-properties": {
@@ -512,8 +512,8 @@
       "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
       "dev": true,
       "requires": {
-        "call-me-maybe": "1.0.1",
-        "glob-to-regexp": "0.3.0"
+        "call-me-maybe": "^1.0.1",
+        "glob-to-regexp": "^0.3.0"
       }
     },
     "@nodelib/fs.stat": {
@@ -596,7 +596,7 @@
       "integrity": "sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==",
       "dev": true,
       "requires": {
-        "@xtuc/ieee754": "1.2.0"
+        "@xtuc/ieee754": "^1.2.0"
       }
     },
     "@webassemblyjs/leb128": {
@@ -714,7 +714,8 @@
     "abab": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
-      "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="
+      "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
+      "dev": true
     },
     "abbrev": {
       "version": "1.1.1",
@@ -727,14 +728,15 @@
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
       "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
       "requires": {
-        "mime-types": "2.1.21",
+        "mime-types": "~2.1.18",
         "negotiator": "0.6.1"
       }
     },
     "acorn": {
       "version": "5.7.3",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-      "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
+      "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+      "dev": true
     },
     "acorn-dynamic-import": {
       "version": "3.0.0",
@@ -742,7 +744,7 @@
       "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
       "dev": true,
       "requires": {
-        "acorn": "5.7.3"
+        "acorn": "^5.0.0"
       }
     },
     "acorn-globals": {
@@ -751,8 +753,8 @@
       "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
       "dev": true,
       "requires": {
-        "acorn": "6.0.2",
-        "acorn-walk": "6.1.0"
+        "acorn": "^6.0.1",
+        "acorn-walk": "^6.0.1"
       },
       "dependencies": {
         "acorn": {
@@ -765,16 +767,16 @@
     },
     "acorn-jsx": {
       "version": "3.0.1",
-      "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
       "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
       "dev": true,
       "requires": {
-        "acorn": "3.3.0"
+        "acorn": "^3.0.4"
       },
       "dependencies": {
         "acorn": {
           "version": "3.3.0",
-          "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
           "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
           "dev": true
         }
@@ -788,17 +790,17 @@
     },
     "adjust-sourcemap-loader": {
       "version": "1.2.0",
-      "resolved": "http://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz",
       "integrity": "sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==",
       "dev": true,
       "requires": {
-        "assert": "1.4.1",
-        "camelcase": "1.2.1",
-        "loader-utils": "1.1.0",
-        "lodash.assign": "4.2.0",
-        "lodash.defaults": "3.1.2",
-        "object-path": "0.9.2",
-        "regex-parser": "2.2.9"
+        "assert": "^1.3.0",
+        "camelcase": "^1.2.1",
+        "loader-utils": "^1.1.0",
+        "lodash.assign": "^4.0.1",
+        "lodash.defaults": "^3.1.2",
+        "object-path": "^0.9.2",
+        "regex-parser": "^2.2.9"
       },
       "dependencies": {
         "lodash.defaults": {
@@ -807,8 +809,8 @@
           "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=",
           "dev": true,
           "requires": {
-            "lodash.assign": "3.2.0",
-            "lodash.restparam": "3.6.1"
+            "lodash.assign": "^3.0.0",
+            "lodash.restparam": "^3.0.0"
           },
           "dependencies": {
             "lodash.assign": {
@@ -817,9 +819,9 @@
               "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=",
               "dev": true,
               "requires": {
-                "lodash._baseassign": "3.2.0",
-                "lodash._createassigner": "3.1.1",
-                "lodash.keys": "3.1.2"
+                "lodash._baseassign": "^3.0.0",
+                "lodash._createassigner": "^3.0.0",
+                "lodash.keys": "^3.0.0"
               }
             }
           }
@@ -832,10 +834,10 @@
       "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",
       "dev": true,
       "requires": {
-        "fast-deep-equal": "2.0.1",
-        "fast-json-stable-stringify": "2.0.0",
-        "json-schema-traverse": "0.4.1",
-        "uri-js": "4.2.2"
+        "fast-deep-equal": "^2.0.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       }
     },
     "ajv-errors": {
@@ -850,16 +852,6 @@
       "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
       "dev": true
     },
-    "align-text": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
-      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-      "requires": {
-        "kind-of": "3.2.2",
-        "longest": "1.0.1",
-        "repeat-string": "1.6.1"
-      }
-    },
     "alphanum-sort": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
@@ -869,7 +861,8 @@
     "amdefine": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
-      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+      "dev": true
     },
     "ansi-colors": {
       "version": "3.2.1",
@@ -883,7 +876,7 @@
       "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
       "dev": true,
       "requires": {
-        "array-back": "2.0.0"
+        "array-back": "^2.0.0"
       }
     },
     "ansi-escapes": {
@@ -909,7 +902,7 @@
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
       "requires": {
-        "color-convert": "1.9.3"
+        "color-convert": "^1.9.0"
       }
     },
     "anymatch": {
@@ -919,8 +912,8 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "micromatch": "2.3.11",
-        "normalize-path": "2.1.1"
+        "micromatch": "^2.1.5",
+        "normalize-path": "^2.0.0"
       }
     },
     "append-transform": {
@@ -929,227 +922,7 @@
       "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
       "dev": true,
       "requires": {
-        "default-require-extensions": "1.0.0"
-      }
-    },
-    "appirio-tech-api-schemas": {
-      "version": "5.0.70",
-      "resolved": "https://registry.npmjs.org/appirio-tech-api-schemas/-/appirio-tech-api-schemas-5.0.70.tgz",
-      "integrity": "sha1-3RtCG/rw8PSokKRTgHSlVYDQy8s=",
-      "requires": {
-        "auto-config-fake-server": "2.0.604"
-      }
-    },
-    "appirio-tech-client-app-layer": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/appirio-tech-client-app-layer/-/appirio-tech-client-app-layer-0.1.3.tgz",
-      "integrity": "sha1-uO5YdHMM2r209RE8NMQvwOsxoOs=",
-      "requires": {
-        "axios": "0.8.1",
-        "history": "1.17.0",
-        "html-webpack-plugin": "1.7.0",
-        "humps": "0.6.0",
-        "isomorphic-fetch": "2.2.1",
-        "jwt-decode": "1.5.1",
-        "lodash": "4.17.11",
-        "normalizr": "1.4.1",
-        "q": "1.5.1",
-        "react": "0.14.9",
-        "react-dom": "0.14.9",
-        "react-redux": "4.4.10",
-        "react-router": "1.0.3",
-        "redux": "3.7.2",
-        "redux-form": "4.2.2",
-        "redux-logger": "2.10.2",
-        "redux-router": "1.0.0",
-        "redux-thunk": "0.1.0"
-      },
-      "dependencies": {
-        "hoist-non-react-statics": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
-          "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
-          "requires": {
-            "react-is": "16.8.6"
-          }
-        },
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "react-is": "16.8.6"
-          }
-        },
-        "react": {
-          "version": "0.14.9",
-          "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz",
-          "integrity": "sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE=",
-          "requires": {
-            "envify": "3.4.1",
-            "fbjs": "0.6.1"
-          }
-        },
-        "react-dom": {
-          "version": "0.14.9",
-          "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.9.tgz",
-          "integrity": "sha1-BQZKPc8PsYgKOyv8nVjFXY2fYpM="
-        },
-        "react-is": {
-          "version": "16.8.6",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
-          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
-        },
-        "react-redux": {
-          "version": "4.4.10",
-          "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-4.4.10.tgz",
-          "integrity": "sha512-tjL0Bmpkj75Td0k+lXlF8Fc8a9GuXFv/3ahUOCXExWs/jhsKiQeTffdH0j5byejCGCRL4tvGFYlrwBF1X/Aujg==",
-          "requires": {
-            "create-react-class": "15.6.3",
-            "hoist-non-react-statics": "3.3.0",
-            "invariant": "2.2.4",
-            "lodash": "4.17.11",
-            "loose-envify": "1.4.0",
-            "prop-types": "15.7.2"
-          }
-        },
-        "redux-thunk": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-0.1.0.tgz",
-          "integrity": "sha1-jjR2BoCLNb+Kkn30YW9v7RAYJuU="
-        }
-      }
-    },
-    "appirio-tech-react-components": {
-      "version": "github:appirio-tech/react-components#dfd84cc432bcd280ce7c9c4b72224b879b77064d",
-      "requires": {
-        "appirio-tech-api-schemas": "5.0.70",
-        "appirio-tech-client-app-layer": "0.1.3",
-        "classnames": "2.2.6",
-        "coffee-script": "1.12.7",
-        "coffeescript": "1.12.7",
-        "formsy-react": "0.19.5",
-        "isomorphic-fetch": "2.2.1",
-        "libphonenumber-js": "1.7.15",
-        "lodash": "4.17.11",
-        "moment": "2.22.2",
-        "prop-types": "15.7.2",
-        "react": "15.6.2",
-        "react-addons-pure-render-mixin": "15.6.2",
-        "react-addons-update": "15.6.2",
-        "react-avatar": "2.5.1",
-        "react-datetime": "2.16.3",
-        "react-dom": "15.6.2",
-        "react-dropzone": "3.13.4",
-        "react-popper": "0.7.5",
-        "react-redux": "4.4.10",
-        "react-router-dom": "4.3.1",
-        "react-select": "0.9.1",
-        "react-switch-button": "1.1.2",
-        "react-textarea-autosize": "5.2.1",
-        "react-transition-group": "2.9.0",
-        "redux-thunk": "2.3.0",
-        "tc-ui": "git+https://github.com/appirio-tech/tc-ui.git#e577a0e704136f1e9ecce92ce4c0626aab932691",
-        "uncontrollable": "4.1.0"
-      },
-      "dependencies": {
-        "coffeescript": {
-          "version": "1.12.7",
-          "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz",
-          "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA=="
-        },
-        "core-js": {
-          "version": "1.2.7",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
-          "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
-        },
-        "fbjs": {
-          "version": "0.8.17",
-          "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
-          "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
-          "requires": {
-            "core-js": "1.2.7",
-            "isomorphic-fetch": "2.2.1",
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "promise": "7.3.1",
-            "setimmediate": "1.0.5",
-            "ua-parser-js": "0.7.19"
-          }
-        },
-        "hoist-non-react-statics": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
-          "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
-          "requires": {
-            "react-is": "16.8.6"
-          }
-        },
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "react-is": "16.8.6"
-          }
-        },
-        "react": {
-          "version": "15.6.2",
-          "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz",
-          "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=",
-          "requires": {
-            "create-react-class": "15.6.3",
-            "fbjs": "0.8.17",
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "prop-types": "15.7.2"
-          }
-        },
-        "react-dom": {
-          "version": "15.6.2",
-          "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz",
-          "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=",
-          "requires": {
-            "fbjs": "0.8.17",
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "prop-types": "15.7.2"
-          }
-        },
-        "react-is": {
-          "version": "16.8.6",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
-          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
-        },
-        "react-redux": {
-          "version": "4.4.10",
-          "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-4.4.10.tgz",
-          "integrity": "sha512-tjL0Bmpkj75Td0k+lXlF8Fc8a9GuXFv/3ahUOCXExWs/jhsKiQeTffdH0j5byejCGCRL4tvGFYlrwBF1X/Aujg==",
-          "requires": {
-            "create-react-class": "15.6.3",
-            "hoist-non-react-statics": "3.3.0",
-            "invariant": "2.2.4",
-            "lodash": "4.17.11",
-            "loose-envify": "1.4.0",
-            "prop-types": "15.7.2"
-          },
-          "dependencies": {
-            "prop-types": {
-              "version": "15.7.2",
-              "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-              "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-              "requires": {
-                "loose-envify": "1.4.0",
-                "object-assign": "4.1.1",
-                "react-is": "16.8.6"
-              }
-            }
-          }
-        }
+        "default-require-extensions": "^1.0.0"
       }
     },
     "aproba": {
@@ -1162,10 +935,9 @@
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
       "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
-      "dev": true,
       "requires": {
-        "delegates": "1.0.0",
-        "readable-stream": "2.0.6"
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
       }
     },
     "argparse": {
@@ -1174,7 +946,7 @@
       "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
       "dev": true,
       "requires": {
-        "sprintf-js": "1.0.3"
+        "sprintf-js": "~1.0.2"
       }
     },
     "argv-tools": {
@@ -1182,8 +954,8 @@
       "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
       "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
       "requires": {
-        "array-back": "2.0.0",
-        "find-replace": "2.0.1"
+        "array-back": "^2.0.0",
+        "find-replace": "^2.0.1"
       }
     },
     "aria-query": {
@@ -1193,7 +965,7 @@
       "dev": true,
       "requires": {
         "ast-types-flow": "0.0.7",
-        "commander": "2.19.0"
+        "commander": "^2.11.0"
       },
       "dependencies": {
         "commander": {
@@ -1210,7 +982,7 @@
       "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
       "dev": true,
       "requires": {
-        "arr-flatten": "1.1.0"
+        "arr-flatten": "^1.0.1"
       }
     },
     "arr-flatten": {
@@ -1230,7 +1002,7 @@
       "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
       "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
       "requires": {
-        "typical": "2.6.1"
+        "typical": "^2.6.1"
       }
     },
     "array-equal": {
@@ -1256,8 +1028,8 @@
       "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.12.0"
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.7.0"
       }
     },
     "array-union": {
@@ -1266,7 +1038,7 @@
       "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
       "dev": true,
       "requires": {
-        "array-uniq": "1.0.3"
+        "array-uniq": "^1.0.1"
       }
     },
     "array-uniq": {
@@ -1287,18 +1059,13 @@
       "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
       "dev": true
     },
-    "asap": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
-      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
-    },
     "asn1": {
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
       "dev": true,
       "requires": {
-        "safer-buffer": "2.1.2"
+        "safer-buffer": "~2.1.0"
       }
     },
     "asn1.js": {
@@ -1307,9 +1074,9 @@
       "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "assert": {
@@ -1350,14 +1117,14 @@
       "integrity": "sha512-MgFMBC6SaYKiE0CqkYd5kZaKyWgxYErnoAmjAhJ8RZt7GKIvx0OvXIsqCqk3fo+wxjeA+tz4/QPS23s3WW/+jA==",
       "dev": true,
       "requires": {
-        "loader-utils": "0.2.17",
-        "lodash.assign": "4.2.0",
-        "mime": "1.4.1"
+        "loader-utils": "^0.2.12",
+        "lodash.assign": "^4.0.0",
+        "mime": "^1.3.4"
       },
       "dependencies": {
         "json5": {
           "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
         },
@@ -1367,10 +1134,10 @@
           "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
           "dev": true,
           "requires": {
-            "big.js": "3.2.0",
-            "emojis-list": "2.1.0",
-            "json5": "0.5.1",
-            "object-assign": "4.1.1"
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
           }
         }
       }
@@ -1381,11 +1148,6 @@
       "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
       "dev": true
     },
-    "ast-types": {
-      "version": "0.9.6",
-      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
-      "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk="
-    },
     "ast-types-flow": {
       "version": "0.0.7",
       "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
@@ -1398,11 +1160,6 @@
       "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
       "dev": true
     },
-    "async": {
-      "version": "0.2.10",
-      "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
-      "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
-    },
     "async-each": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
@@ -1424,7 +1181,8 @@
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
     },
     "atob": {
       "version": "2.1.2",
@@ -1432,54 +1190,39 @@
       "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
       "dev": true
     },
-    "attr-accept": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz",
-      "integrity": "sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==",
-      "requires": {
-        "core-js": "2.5.7"
-      }
-    },
     "auth0-js": {
       "version": "6.8.4",
-      "resolved": "http://registry.npmjs.org/auth0-js/-/auth0-js-6.8.4.tgz",
+      "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-6.8.4.tgz",
       "integrity": "sha1-Qw3Uystk2NFdabHmIRhPmipkCmE=",
       "requires": {
-        "Base64": "0.1.4",
+        "Base64": "~0.1.3",
         "json-fallback": "0.0.1",
-        "jsonp": "0.0.4",
-        "qs": "git+https://github.com/jfromaniello/node-querystring.git#5d96513991635e3e22d7aa54a8584d6ce97cace8",
-        "reqwest": "1.1.6",
-        "trim": "0.0.1",
-        "winchan": "0.1.4",
-        "xtend": "2.1.2"
+        "jsonp": "~0.0.4",
+        "qs": "qs@git+https://github.com/jfromaniello/node-querystring.git#5d96513991635e3e22d7aa54a8584d6ce97cace8",
+        "reqwest": "^1.1.4",
+        "trim": "~0.0.1",
+        "winchan": "^0.1.1",
+        "xtend": "~2.1.1"
       },
       "dependencies": {
         "qs": {
-          "version": "git+https://github.com/jfromaniello/node-querystring.git#5d96513991635e3e22d7aa54a8584d6ce97cace8"
+          "version": "git+https://github.com/jfromaniello/node-querystring.git#5d96513991635e3e22d7aa54a8584d6ce97cace8",
+          "from": "qs@git+https://github.com/jfromaniello/node-querystring.git#5d96513991635e3e22d7aa54a8584d6ce97cace8"
         }
       }
     },
-    "auto-config-fake-server": {
-      "version": "2.0.604",
-      "resolved": "https://registry.npmjs.org/auto-config-fake-server/-/auto-config-fake-server-2.0.604.tgz",
-      "integrity": "sha1-FY5RTIR5nRQ5iNw/w7mpkwnNhkY=",
-      "requires": {
-        "sinon": "2.0.0-pre"
-      }
-    },
     "autoprefixer": {
       "version": "8.6.5",
       "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz",
       "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==",
       "dev": true,
       "requires": {
-        "browserslist": "3.2.8",
-        "caniuse-lite": "1.0.30000899",
-        "normalize-range": "0.1.2",
-        "num2fraction": "1.2.2",
-        "postcss": "6.0.23",
-        "postcss-value-parser": "3.3.1"
+        "browserslist": "^3.2.8",
+        "caniuse-lite": "^1.0.30000864",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^6.0.23",
+        "postcss-value-parser": "^3.2.3"
       }
     },
     "aws-sign2": {
@@ -1494,14 +1237,6 @@
       "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
       "dev": true
     },
-    "axios": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.8.1.tgz",
-      "integrity": "sha1-4Or+wPNGE5Un3Dt5/cv/gDSiQEU=",
-      "requires": {
-        "follow-redirects": "0.0.7"
-      }
-    },
     "axobject-query": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz",
@@ -1517,21 +1252,21 @@
       "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
       "dev": true,
       "requires": {
-        "babel-core": "6.26.3",
-        "babel-polyfill": "6.26.0",
-        "babel-register": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "chokidar": "1.7.0",
-        "commander": "2.19.0",
-        "convert-source-map": "1.6.0",
-        "fs-readdir-recursive": "1.1.0",
-        "glob": "7.1.3",
-        "lodash": "4.17.11",
-        "output-file-sync": "1.1.2",
-        "path-is-absolute": "1.0.1",
-        "slash": "1.0.0",
-        "source-map": "0.5.7",
-        "v8flags": "2.1.1"
+        "babel-core": "^6.26.0",
+        "babel-polyfill": "^6.26.0",
+        "babel-register": "^6.26.0",
+        "babel-runtime": "^6.26.0",
+        "chokidar": "^1.6.1",
+        "commander": "^2.11.0",
+        "convert-source-map": "^1.5.0",
+        "fs-readdir-recursive": "^1.0.0",
+        "glob": "^7.1.2",
+        "lodash": "^4.17.4",
+        "output-file-sync": "^1.1.2",
+        "path-is-absolute": "^1.0.1",
+        "slash": "^1.0.0",
+        "source-map": "^0.5.6",
+        "v8flags": "^2.1.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1540,8 +1275,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         },
         "commander": {
@@ -1556,12 +1291,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "source-map": {
@@ -1578,9 +1313,9 @@
       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
       "dev": true,
       "requires": {
-        "chalk": "1.1.3",
-        "esutils": "2.0.2",
-        "js-tokens": "3.0.2"
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
       },
       "dependencies": {
         "ansi-styles": {
@@ -1591,15 +1326,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           }
         },
         "js-tokens": {
@@ -1622,25 +1357,25 @@
       "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
       "dev": true,
       "requires": {
-        "babel-code-frame": "6.26.0",
-        "babel-generator": "6.26.1",
-        "babel-helpers": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-register": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "convert-source-map": "1.6.0",
-        "debug": "2.6.9",
-        "json5": "0.5.1",
-        "lodash": "4.17.11",
-        "minimatch": "3.0.4",
-        "path-is-absolute": "1.0.1",
-        "private": "0.1.8",
-        "slash": "1.0.0",
-        "source-map": "0.5.7"
+        "babel-code-frame": "^6.26.0",
+        "babel-generator": "^6.26.0",
+        "babel-helpers": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-register": "^6.26.0",
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "convert-source-map": "^1.5.1",
+        "debug": "^2.6.9",
+        "json5": "^0.5.1",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.4",
+        "path-is-absolute": "^1.0.1",
+        "private": "^0.1.8",
+        "slash": "^1.0.0",
+        "source-map": "^0.5.7"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1649,8 +1384,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         },
         "debug": {
@@ -1664,7 +1399,7 @@
         },
         "json5": {
           "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
         },
@@ -1693,12 +1428,12 @@
         "@babel/types": "7.0.0-beta.44",
         "babylon": "7.0.0-beta.44",
         "eslint-scope": "3.7.1",
-        "eslint-visitor-keys": "1.0.0"
+        "eslint-visitor-keys": "^1.0.0"
       },
       "dependencies": {
         "babylon": {
           "version": "7.0.0-beta.44",
-          "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+          "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
           "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
           "dev": true
         }
@@ -1710,14 +1445,14 @@
       "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
       "dev": true,
       "requires": {
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "detect-indent": "4.0.0",
-        "jsesc": "1.3.0",
-        "lodash": "4.17.11",
-        "source-map": "0.5.7",
-        "trim-right": "1.0.1"
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "detect-indent": "^4.0.0",
+        "jsesc": "^1.3.0",
+        "lodash": "^4.17.4",
+        "source-map": "^0.5.7",
+        "trim-right": "^1.0.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1726,8 +1461,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         },
         "source-map": {
@@ -1744,9 +1479,9 @@
       "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1755,8 +1490,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1767,9 +1502,9 @@
       "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
       "dev": true,
       "requires": {
-        "babel-helper-explode-assignable-expression": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-explode-assignable-expression": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1778,8 +1513,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1790,9 +1525,9 @@
       "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "esutils": "2.0.2"
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "esutils": "^2.0.2"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1801,8 +1536,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1813,10 +1548,10 @@
       "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
       "dev": true,
       "requires": {
-        "babel-helper-hoist-variables": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-hoist-variables": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1825,8 +1560,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1837,10 +1572,10 @@
       "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
       "dev": true,
       "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.11"
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1849,8 +1584,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1861,9 +1596,9 @@
       "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1872,8 +1607,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1884,10 +1619,10 @@
       "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
       "dev": true,
       "requires": {
-        "babel-helper-bindify-decorators": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-bindify-decorators": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1896,8 +1631,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1908,11 +1643,11 @@
       "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
       "dev": true,
       "requires": {
-        "babel-helper-get-function-arity": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-get-function-arity": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1921,8 +1656,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1933,8 +1668,8 @@
       "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1943,8 +1678,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1955,8 +1690,8 @@
       "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1965,8 +1700,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1977,8 +1712,8 @@
       "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -1987,8 +1722,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -1999,9 +1734,9 @@
       "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.11"
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2010,8 +1745,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2022,11 +1757,11 @@
       "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
       "dev": true,
       "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2035,8 +1770,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2047,12 +1782,12 @@
       "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
       "dev": true,
       "requires": {
-        "babel-helper-optimise-call-expression": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-optimise-call-expression": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2061,8 +1796,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2073,8 +1808,8 @@
       "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2083,8 +1818,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2095,8 +1830,8 @@
       "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==",
       "dev": true,
       "requires": {
-        "babel-plugin-istanbul": "4.1.6",
-        "babel-preset-jest": "23.2.0"
+        "babel-plugin-istanbul": "^4.1.6",
+        "babel-preset-jest": "^23.2.0"
       }
     },
     "babel-loader": {
@@ -2105,9 +1840,9 @@
       "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==",
       "dev": true,
       "requires": {
-        "find-cache-dir": "1.0.0",
-        "loader-utils": "1.1.0",
-        "mkdirp": "0.5.1"
+        "find-cache-dir": "^1.0.0",
+        "loader-utils": "^1.0.2",
+        "mkdirp": "^0.5.1"
       }
     },
     "babel-messages": {
@@ -2116,7 +1851,7 @@
       "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2125,8 +1860,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2137,7 +1872,7 @@
       "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2146,8 +1881,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2158,8 +1893,8 @@
       "integrity": "sha512-Iv98dKRgQnhuHFcn2heHH1OpHo9LGyoKjlsAkj6/Q3wkwpVyHrNfVua/WHnrwe2f7EHy1KANnOSg+q4AJ6ZzaQ==",
       "dev": true,
       "requires": {
-        "css-modules-require-hook": "4.2.3",
-        "mkdirp": "0.5.1"
+        "css-modules-require-hook": "^4.0.6",
+        "mkdirp": "^0.5.1"
       }
     },
     "babel-plugin-dynamic-import-node": {
@@ -2168,7 +1903,7 @@
       "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==",
       "dev": true,
       "requires": {
-        "object.assign": "4.1.0"
+        "object.assign": "^4.1.0"
       }
     },
     "babel-plugin-inline-react-svg": {
@@ -2177,24 +1912,24 @@
       "integrity": "sha512-Pr/J5kicFEpIvwooR3mytJWXfyGXoP4gp4QzTdN0jLoa7lU2OJVyhHMm17ekA3okxwbLaQehSc0kV/UVrj343w==",
       "dev": true,
       "requires": {
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babylon": "6.18.0",
-        "lodash.isplainobject": "4.0.6",
-        "resolve": "1.8.1",
-        "svgo": "0.7.2"
+        "babel-template": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babylon": "^6.18.0",
+        "lodash.isplainobject": "^4.0.6",
+        "resolve": "^1.8.1",
+        "svgo": "^0.7.2"
       }
     },
     "babel-plugin-istanbul": {
       "version": "4.1.6",
-      "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
       "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-object-rest-spread": "6.13.0",
-        "find-up": "2.1.0",
-        "istanbul-lib-instrument": "1.10.2",
-        "test-exclude": "4.2.3"
+        "babel-plugin-syntax-object-rest-spread": "^6.13.0",
+        "find-up": "^2.1.0",
+        "istanbul-lib-instrument": "^1.10.1",
+        "test-exclude": "^4.2.1"
       }
     },
     "babel-plugin-jest-hoist": {
@@ -2209,11 +1944,11 @@
       "integrity": "sha512-1Q77Al4ydp6nYApJ7sQ2fmgz30WuQgJZegIYuyOdbdpxenB/bSezQ3hDPsumIXGlUS4vUIv+EwFjzzXZNWtARw==",
       "dev": true,
       "requires": {
-        "find-babel-config": "1.1.0",
-        "glob": "7.1.3",
-        "pkg-up": "2.0.0",
-        "reselect": "3.0.1",
-        "resolve": "1.8.1"
+        "find-babel-config": "^1.1.0",
+        "glob": "^7.1.2",
+        "pkg-up": "^2.0.0",
+        "reselect": "^3.0.1",
+        "resolve": "^1.4.0"
       },
       "dependencies": {
         "glob": {
@@ -2222,12 +1957,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
@@ -2238,77 +1973,77 @@
       "integrity": "sha512-pU7owkj5IO6rlleRzaF27ME/eCG7ZhO+EM+WfthfeykYe0eZzK51JD7nlcUr4UU9y4Zlc+QsTH+139L7PSwYtQ==",
       "dev": true,
       "requires": {
-        "ajv": "6.5.4",
-        "ajv-keywords": "3.2.0",
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-types": "6.26.0",
-        "generic-names": "1.0.3",
-        "postcss": "6.0.23",
-        "postcss-modules": "1.4.1",
-        "postcss-modules-extract-imports": "1.1.0",
-        "postcss-modules-local-by-default": "1.2.0",
-        "postcss-modules-parser": "1.1.1",
-        "postcss-modules-scope": "1.1.0",
-        "postcss-modules-values": "1.3.0"
+        "ajv": "^6.5.0",
+        "ajv-keywords": "^3.2.0",
+        "babel-plugin-syntax-jsx": "^6.18.0",
+        "babel-types": "^6.26.0",
+        "generic-names": "^1.0.3",
+        "postcss": "^6.0.22",
+        "postcss-modules": "^1.1.0",
+        "postcss-modules-extract-imports": "^1.1.0",
+        "postcss-modules-local-by-default": "^1.2.0",
+        "postcss-modules-parser": "^1.1.1",
+        "postcss-modules-scope": "^1.1.0",
+        "postcss-modules-values": "^1.3.0"
       }
     },
     "babel-plugin-syntax-async-functions": {
       "version": "6.13.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
       "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
       "dev": true
     },
     "babel-plugin-syntax-async-generators": {
       "version": "6.13.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
       "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
       "dev": true
     },
     "babel-plugin-syntax-class-properties": {
       "version": "6.13.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
       "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=",
       "dev": true
     },
     "babel-plugin-syntax-decorators": {
       "version": "6.13.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
       "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
       "dev": true
     },
     "babel-plugin-syntax-dynamic-import": {
       "version": "6.18.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
       "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
       "dev": true
     },
     "babel-plugin-syntax-exponentiation-operator": {
       "version": "6.13.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
       "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
       "dev": true
     },
     "babel-plugin-syntax-export-extensions": {
       "version": "6.13.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz",
       "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=",
       "dev": true
     },
     "babel-plugin-syntax-flow": {
       "version": "6.18.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
       "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
       "dev": true
     },
     "babel-plugin-syntax-jsx": {
       "version": "6.18.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
       "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
       "dev": true
     },
     "babel-plugin-syntax-object-rest-spread": {
       "version": "6.13.0",
-      "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
       "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
       "dev": true
     },
@@ -2324,7 +2059,7 @@
       "integrity": "sha512-nvsoKEdfEDoMx88K1KKGbP8pmkv1a6+QMea/HrlYNkm0bP1Y7vjHj0Ir0cu8DeiZ+UPssbM1piaRVzSLLlA0SA==",
       "dev": true,
       "requires": {
-        "asset-require-hook": "1.2.0"
+        "asset-require-hook": "^1.0.2"
       }
     },
     "babel-plugin-transform-async-generator-functions": {
@@ -2333,9 +2068,9 @@
       "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
       "dev": true,
       "requires": {
-        "babel-helper-remap-async-to-generator": "6.24.1",
-        "babel-plugin-syntax-async-generators": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-helper-remap-async-to-generator": "^6.24.1",
+        "babel-plugin-syntax-async-generators": "^6.5.0",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2344,8 +2079,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2356,9 +2091,9 @@
       "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
       "dev": true,
       "requires": {
-        "babel-helper-remap-async-to-generator": "6.24.1",
-        "babel-plugin-syntax-async-functions": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-helper-remap-async-to-generator": "^6.24.1",
+        "babel-plugin-syntax-async-functions": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2367,8 +2102,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2379,10 +2114,10 @@
       "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
       "dev": true,
       "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-plugin-syntax-class-properties": "6.13.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-helper-function-name": "^6.24.1",
+        "babel-plugin-syntax-class-properties": "^6.8.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2391,8 +2126,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2403,11 +2138,11 @@
       "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
       "dev": true,
       "requires": {
-        "babel-helper-explode-class": "6.24.1",
-        "babel-plugin-syntax-decorators": "6.13.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-explode-class": "^6.24.1",
+        "babel-plugin-syntax-decorators": "^6.13.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2416,8 +2151,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2428,7 +2163,7 @@
       "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2437,8 +2172,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2449,7 +2184,7 @@
       "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2458,8 +2193,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2470,11 +2205,11 @@
       "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "lodash": "4.17.11"
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2483,8 +2218,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2495,15 +2230,15 @@
       "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
       "dev": true,
       "requires": {
-        "babel-helper-define-map": "6.26.0",
-        "babel-helper-function-name": "6.24.1",
-        "babel-helper-optimise-call-expression": "6.24.1",
-        "babel-helper-replace-supers": "6.24.1",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-define-map": "^6.24.1",
+        "babel-helper-function-name": "^6.24.1",
+        "babel-helper-optimise-call-expression": "^6.24.1",
+        "babel-helper-replace-supers": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2512,8 +2247,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2524,8 +2259,8 @@
       "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2534,8 +2269,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2546,7 +2281,7 @@
       "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2555,8 +2290,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2567,8 +2302,8 @@
       "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2577,8 +2312,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2589,7 +2324,7 @@
       "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2598,8 +2333,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2610,9 +2345,9 @@
       "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
       "dev": true,
       "requires": {
-        "babel-helper-function-name": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2621,8 +2356,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2633,7 +2368,7 @@
       "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2642,8 +2377,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2654,9 +2389,9 @@
       "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
       "dev": true,
       "requires": {
-        "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2665,8 +2400,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2677,10 +2412,10 @@
       "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
       "dev": true,
       "requires": {
-        "babel-plugin-transform-strict-mode": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-plugin-transform-strict-mode": "^6.24.1",
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-types": "^6.26.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2689,8 +2424,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2701,9 +2436,9 @@
       "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
       "dev": true,
       "requires": {
-        "babel-helper-hoist-variables": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-helper-hoist-variables": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2712,8 +2447,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2724,9 +2459,9 @@
       "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
       "dev": true,
       "requires": {
-        "babel-plugin-transform-es2015-modules-amd": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0"
+        "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2735,8 +2470,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2747,8 +2482,8 @@
       "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
       "dev": true,
       "requires": {
-        "babel-helper-replace-supers": "6.24.1",
-        "babel-runtime": "6.26.0"
+        "babel-helper-replace-supers": "^6.24.1",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2757,8 +2492,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2769,12 +2504,12 @@
       "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
       "dev": true,
       "requires": {
-        "babel-helper-call-delegate": "6.24.1",
-        "babel-helper-get-function-arity": "6.24.1",
-        "babel-runtime": "6.26.0",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-call-delegate": "^6.24.1",
+        "babel-helper-get-function-arity": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2783,8 +2518,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2795,8 +2530,8 @@
       "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2805,8 +2540,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2817,7 +2552,7 @@
       "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2826,8 +2561,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2838,9 +2573,9 @@
       "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
       "dev": true,
       "requires": {
-        "babel-helper-regex": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-helper-regex": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2849,8 +2584,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2861,7 +2596,7 @@
       "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2870,8 +2605,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2882,7 +2617,7 @@
       "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2891,8 +2626,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2903,9 +2638,9 @@
       "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
       "dev": true,
       "requires": {
-        "babel-helper-regex": "6.26.0",
-        "babel-runtime": "6.26.0",
-        "regexpu-core": "2.0.0"
+        "babel-helper-regex": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "regexpu-core": "^2.0.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2914,8 +2649,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         },
         "regexpu-core": {
@@ -2924,9 +2659,9 @@
           "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
           "dev": true,
           "requires": {
-            "regenerate": "1.4.0",
-            "regjsgen": "0.2.0",
-            "regjsparser": "0.1.5"
+            "regenerate": "^1.2.1",
+            "regjsgen": "^0.2.0",
+            "regjsparser": "^0.1.4"
           }
         }
       }
@@ -2937,9 +2672,9 @@
       "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
       "dev": true,
       "requires": {
-        "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
-        "babel-plugin-syntax-exponentiation-operator": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
+        "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2948,8 +2683,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2960,8 +2695,8 @@
       "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-export-extensions": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-export-extensions": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2970,8 +2705,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -2982,8 +2717,8 @@
       "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-flow": "6.18.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-flow": "^6.18.0",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -2992,8 +2727,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3004,8 +2739,8 @@
       "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-object-rest-spread": "6.13.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+        "babel-runtime": "^6.26.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3014,8 +2749,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3026,7 +2761,7 @@
       "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3035,8 +2770,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3047,9 +2782,9 @@
       "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
       "dev": true,
       "requires": {
-        "babel-helper-builder-react-jsx": "6.26.0",
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-runtime": "6.26.0"
+        "babel-helper-builder-react-jsx": "^6.24.1",
+        "babel-plugin-syntax-jsx": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3058,8 +2793,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3070,8 +2805,8 @@
       "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-jsx": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3080,8 +2815,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3092,8 +2827,8 @@
       "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-runtime": "6.26.0"
+        "babel-plugin-syntax-jsx": "^6.8.0",
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3102,8 +2837,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3114,7 +2849,7 @@
       "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
       "dev": true,
       "requires": {
-        "regenerator-transform": "0.10.1"
+        "regenerator-transform": "^0.10.0"
       }
     },
     "babel-plugin-transform-runtime": {
@@ -3123,7 +2858,7 @@
       "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0"
+        "babel-runtime": "^6.22.0"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3132,8 +2867,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3144,8 +2879,8 @@
       "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0"
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3154,8 +2889,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3166,9 +2901,9 @@
       "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "core-js": "2.5.7",
-        "regenerator-runtime": "0.10.5"
+        "babel-runtime": "^6.26.0",
+        "core-js": "^2.5.0",
+        "regenerator-runtime": "^0.10.5"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3177,8 +2912,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           },
           "dependencies": {
             "regenerator-runtime": {
@@ -3203,36 +2938,36 @@
       "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==",
       "dev": true,
       "requires": {
-        "babel-plugin-check-es2015-constants": "6.22.0",
-        "babel-plugin-syntax-trailing-function-commas": "6.22.0",
-        "babel-plugin-transform-async-to-generator": "6.24.1",
-        "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
-        "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
-        "babel-plugin-transform-es2015-block-scoping": "6.26.0",
-        "babel-plugin-transform-es2015-classes": "6.24.1",
-        "babel-plugin-transform-es2015-computed-properties": "6.24.1",
-        "babel-plugin-transform-es2015-destructuring": "6.23.0",
-        "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
-        "babel-plugin-transform-es2015-for-of": "6.23.0",
-        "babel-plugin-transform-es2015-function-name": "6.24.1",
-        "babel-plugin-transform-es2015-literals": "6.22.0",
-        "babel-plugin-transform-es2015-modules-amd": "6.24.1",
-        "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
-        "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
-        "babel-plugin-transform-es2015-modules-umd": "6.24.1",
-        "babel-plugin-transform-es2015-object-super": "6.24.1",
-        "babel-plugin-transform-es2015-parameters": "6.24.1",
-        "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
-        "babel-plugin-transform-es2015-spread": "6.22.0",
-        "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
-        "babel-plugin-transform-es2015-template-literals": "6.22.0",
-        "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
-        "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
-        "babel-plugin-transform-exponentiation-operator": "6.24.1",
-        "babel-plugin-transform-regenerator": "6.26.0",
-        "browserslist": "3.2.8",
-        "invariant": "2.2.4",
-        "semver": "5.6.0"
+        "babel-plugin-check-es2015-constants": "^6.22.0",
+        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+        "babel-plugin-transform-async-to-generator": "^6.22.0",
+        "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+        "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+        "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
+        "babel-plugin-transform-es2015-classes": "^6.23.0",
+        "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
+        "babel-plugin-transform-es2015-destructuring": "^6.23.0",
+        "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
+        "babel-plugin-transform-es2015-for-of": "^6.23.0",
+        "babel-plugin-transform-es2015-function-name": "^6.22.0",
+        "babel-plugin-transform-es2015-literals": "^6.22.0",
+        "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
+        "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
+        "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
+        "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
+        "babel-plugin-transform-es2015-object-super": "^6.22.0",
+        "babel-plugin-transform-es2015-parameters": "^6.23.0",
+        "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
+        "babel-plugin-transform-es2015-spread": "^6.22.0",
+        "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
+        "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+        "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
+        "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
+        "babel-plugin-transform-exponentiation-operator": "^6.22.0",
+        "babel-plugin-transform-regenerator": "^6.22.0",
+        "browserslist": "^3.2.6",
+        "invariant": "^2.2.2",
+        "semver": "^5.3.0"
       },
       "dependencies": {
         "semver": {
@@ -3249,7 +2984,7 @@
       "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
       "dev": true,
       "requires": {
-        "babel-plugin-transform-flow-strip-types": "6.22.0"
+        "babel-plugin-transform-flow-strip-types": "^6.22.0"
       }
     },
     "babel-preset-jest": {
@@ -3258,8 +2993,8 @@
       "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=",
       "dev": true,
       "requires": {
-        "babel-plugin-jest-hoist": "23.2.0",
-        "babel-plugin-syntax-object-rest-spread": "6.13.0"
+        "babel-plugin-jest-hoist": "^23.2.0",
+        "babel-plugin-syntax-object-rest-spread": "^6.13.0"
       }
     },
     "babel-preset-react": {
@@ -3268,12 +3003,12 @@
       "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-jsx": "6.18.0",
-        "babel-plugin-transform-react-display-name": "6.25.0",
-        "babel-plugin-transform-react-jsx": "6.24.1",
-        "babel-plugin-transform-react-jsx-self": "6.22.0",
-        "babel-plugin-transform-react-jsx-source": "6.22.0",
-        "babel-preset-flow": "6.23.0"
+        "babel-plugin-syntax-jsx": "^6.3.13",
+        "babel-plugin-transform-react-display-name": "^6.23.0",
+        "babel-plugin-transform-react-jsx": "^6.24.1",
+        "babel-plugin-transform-react-jsx-self": "^6.22.0",
+        "babel-plugin-transform-react-jsx-source": "^6.22.0",
+        "babel-preset-flow": "^6.23.0"
       }
     },
     "babel-preset-stage-2": {
@@ -3282,10 +3017,10 @@
       "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-dynamic-import": "6.18.0",
-        "babel-plugin-transform-class-properties": "6.24.1",
-        "babel-plugin-transform-decorators": "6.24.1",
-        "babel-preset-stage-3": "6.24.1"
+        "babel-plugin-syntax-dynamic-import": "^6.18.0",
+        "babel-plugin-transform-class-properties": "^6.24.1",
+        "babel-plugin-transform-decorators": "^6.24.1",
+        "babel-preset-stage-3": "^6.24.1"
       }
     },
     "babel-preset-stage-3": {
@@ -3294,11 +3029,11 @@
       "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-trailing-function-commas": "6.22.0",
-        "babel-plugin-transform-async-generator-functions": "6.24.1",
-        "babel-plugin-transform-async-to-generator": "6.24.1",
-        "babel-plugin-transform-exponentiation-operator": "6.24.1",
-        "babel-plugin-transform-object-rest-spread": "6.26.0"
+        "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+        "babel-plugin-transform-async-generator-functions": "^6.24.1",
+        "babel-plugin-transform-async-to-generator": "^6.24.1",
+        "babel-plugin-transform-exponentiation-operator": "^6.24.1",
+        "babel-plugin-transform-object-rest-spread": "^6.22.0"
       }
     },
     "babel-register": {
@@ -3307,13 +3042,13 @@
       "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
       "dev": true,
       "requires": {
-        "babel-core": "6.26.3",
-        "babel-runtime": "6.26.0",
-        "core-js": "2.5.7",
-        "home-or-tmp": "2.0.0",
-        "lodash": "4.17.11",
-        "mkdirp": "0.5.1",
-        "source-map-support": "0.4.18"
+        "babel-core": "^6.26.0",
+        "babel-runtime": "^6.26.0",
+        "core-js": "^2.5.0",
+        "home-or-tmp": "^2.0.0",
+        "lodash": "^4.17.4",
+        "mkdirp": "^0.5.1",
+        "source-map-support": "^0.4.15"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3322,18 +3057,18 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
     },
     "babel-runtime": {
       "version": "6.6.1",
-      "resolved": "http://registry.npmjs.org/babel-runtime/-/babel-runtime-6.6.1.tgz",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.6.1.tgz",
       "integrity": "sha1-eIuUtvY04luRvWxd9y1GdFevsAA=",
       "requires": {
-        "core-js": "2.5.7"
+        "core-js": "^2.1.0"
       }
     },
     "babel-template": {
@@ -3342,11 +3077,11 @@
       "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "lodash": "4.17.11"
+        "babel-runtime": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "lodash": "^4.17.4"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3355,8 +3090,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3367,15 +3102,15 @@
       "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
       "dev": true,
       "requires": {
-        "babel-code-frame": "6.26.0",
-        "babel-messages": "6.23.0",
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "debug": "2.6.9",
-        "globals": "9.18.0",
-        "invariant": "2.2.4",
-        "lodash": "4.17.11"
+        "babel-code-frame": "^6.26.0",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "debug": "^2.6.8",
+        "globals": "^9.18.0",
+        "invariant": "^2.2.2",
+        "lodash": "^4.17.4"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3384,8 +3119,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         },
         "debug": {
@@ -3411,10 +3146,10 @@
       "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "esutils": "2.0.2",
-        "lodash": "4.17.11",
-        "to-fast-properties": "1.0.3"
+        "babel-runtime": "^6.26.0",
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.4",
+        "to-fast-properties": "^1.0.3"
       },
       "dependencies": {
         "babel-runtime": {
@@ -3423,8 +3158,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -3440,7 +3175,7 @@
       "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz",
       "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=",
       "requires": {
-        "precond": "0.2.3"
+        "precond": "0.2"
       }
     },
     "bail": {
@@ -3452,7 +3187,8 @@
     "balanced-match": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
     },
     "base": {
       "version": "0.11.2",
@@ -3460,13 +3196,13 @@
       "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
       "dev": true,
       "requires": {
-        "cache-base": "1.0.1",
-        "class-utils": "0.3.6",
-        "component-emitter": "1.2.1",
-        "define-property": "1.0.0",
-        "isobject": "3.0.1",
-        "mixin-deep": "1.3.1",
-        "pascalcase": "0.1.1"
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
       },
       "dependencies": {
         "define-property": {
@@ -3475,7 +3211,7 @@
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "1.0.2"
+            "is-descriptor": "^1.0.0"
           }
         },
         "is-accessor-descriptor": {
@@ -3484,7 +3220,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -3493,7 +3229,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -3502,9 +3238,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "isobject": {
@@ -3526,11 +3262,6 @@
       "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz",
       "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA="
     },
-    "base62": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.8.tgz",
-      "integrity": "sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA=="
-    },
     "base64-js": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
@@ -3551,7 +3282,7 @@
       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
       "dev": true,
       "requires": {
-        "tweetnacl": "0.14.5"
+        "tweetnacl": "^0.14.3"
       }
     },
     "big.js": {
@@ -3572,18 +3303,14 @@
       "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3"
+        "inherits": "~2.0.0"
       }
     },
     "bluebird": {
       "version": "3.5.2",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz",
-      "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg=="
-    },
-    "blueimp-tmpl": {
-      "version": "2.5.7",
-      "resolved": "https://registry.npmjs.org/blueimp-tmpl/-/blueimp-tmpl-2.5.7.tgz",
-      "integrity": "sha1-M/sSwTnWVRKuQK+9ji3vjZ25ZJA="
+      "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==",
+      "dev": true
     },
     "bn.js": {
       "version": "4.11.8",
@@ -3597,15 +3324,15 @@
       "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
       "requires": {
         "bytes": "3.0.0",
-        "content-type": "1.0.4",
+        "content-type": "~1.0.4",
         "debug": "2.6.9",
-        "depd": "1.1.2",
-        "http-errors": "1.6.3",
+        "depd": "~1.1.2",
+        "http-errors": "~1.6.3",
         "iconv-lite": "0.4.23",
-        "on-finished": "2.3.0",
+        "on-finished": "~2.3.0",
         "qs": "6.5.2",
         "raw-body": "2.3.3",
-        "type-is": "1.6.16"
+        "type-is": "~1.6.16"
       },
       "dependencies": {
         "debug": {
@@ -3621,7 +3348,7 @@
           "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
           "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
           "requires": {
-            "safer-buffer": "2.1.2"
+            "safer-buffer": ">= 2.1.2 < 3"
           }
         },
         "ms": {
@@ -3631,22 +3358,13 @@
         }
       }
     },
-    "bourbon": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/bourbon/-/bourbon-4.3.4.tgz",
-      "integrity": "sha1-TaOAAp6SwMj5dkx3lFGhNLEefMM="
-    },
-    "bourbon-neat": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/bourbon-neat/-/bourbon-neat-1.7.2.tgz",
-      "integrity": "sha1-oiixJ0R53iR20yszFTEHylBTzz0="
-    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
       "requires": {
-        "balanced-match": "1.0.0",
+        "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
       }
     },
@@ -3656,9 +3374,9 @@
       "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
       "dev": true,
       "requires": {
-        "expand-range": "1.8.2",
-        "preserve": "0.2.0",
-        "repeat-element": "1.1.3"
+        "expand-range": "^1.8.1",
+        "preserve": "^0.2.0",
+        "repeat-element": "^1.1.2"
       }
     },
     "brorand": {
@@ -3692,16 +3410,16 @@
     },
     "browserify-aes": {
       "version": "1.2.0",
-      "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
       "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
       "dev": true,
       "requires": {
-        "buffer-xor": "1.0.3",
-        "cipher-base": "1.0.4",
-        "create-hash": "1.2.0",
-        "evp_bytestokey": "1.0.3",
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "browserify-cipher": {
@@ -3710,9 +3428,9 @@
       "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
       "dev": true,
       "requires": {
-        "browserify-aes": "1.2.0",
-        "browserify-des": "1.0.2",
-        "evp_bytestokey": "1.0.3"
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
       }
     },
     "browserify-des": {
@@ -3721,20 +3439,20 @@
       "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "des.js": "1.0.0",
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
     "browserify-rsa": {
       "version": "4.0.1",
-      "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
       "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "randombytes": "2.0.6"
+        "bn.js": "^4.1.0",
+        "randombytes": "^2.0.1"
       }
     },
     "browserify-sign": {
@@ -3743,13 +3461,13 @@
       "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "browserify-rsa": "4.0.1",
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "elliptic": "6.4.1",
-        "inherits": "2.0.3",
-        "parse-asn1": "5.1.1"
+        "bn.js": "^4.1.1",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.2",
+        "elliptic": "^6.0.0",
+        "inherits": "^2.0.1",
+        "parse-asn1": "^5.0.0"
       }
     },
     "browserify-zlib": {
@@ -3758,7 +3476,7 @@
       "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
       "dev": true,
       "requires": {
-        "pako": "1.0.6"
+        "pako": "~1.0.5"
       }
     },
     "browserslist": {
@@ -3767,8 +3485,8 @@
       "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "1.0.30000899",
-        "electron-to-chromium": "1.3.82"
+        "caniuse-lite": "^1.0.30000844",
+        "electron-to-chromium": "^1.3.47"
       }
     },
     "bser": {
@@ -3777,18 +3495,18 @@
       "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=",
       "dev": true,
       "requires": {
-        "node-int64": "0.4.0"
+        "node-int64": "^0.4.0"
       }
     },
     "buffer": {
       "version": "4.9.1",
-      "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
       "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
       "dev": true,
       "requires": {
-        "base64-js": "1.3.0",
-        "ieee754": "1.1.12",
-        "isarray": "1.0.0"
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
       }
     },
     "buffer-from": {
@@ -3826,19 +3544,19 @@
       "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
       "dev": true,
       "requires": {
-        "bluebird": "3.5.2",
-        "chownr": "1.1.1",
-        "glob": "7.1.3",
-        "graceful-fs": "4.1.11",
-        "lru-cache": "4.1.3",
-        "mississippi": "2.0.0",
-        "mkdirp": "0.5.1",
-        "move-concurrently": "1.0.1",
-        "promise-inflight": "1.0.1",
-        "rimraf": "2.6.2",
-        "ssri": "5.3.0",
-        "unique-filename": "1.1.1",
-        "y18n": "4.0.0"
+        "bluebird": "^3.5.1",
+        "chownr": "^1.0.1",
+        "glob": "^7.1.2",
+        "graceful-fs": "^4.1.11",
+        "lru-cache": "^4.1.1",
+        "mississippi": "^2.0.0",
+        "mkdirp": "^0.5.1",
+        "move-concurrently": "^1.0.1",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^2.6.2",
+        "ssri": "^5.2.4",
+        "unique-filename": "^1.1.0",
+        "y18n": "^4.0.0"
       },
       "dependencies": {
         "glob": {
@@ -3847,12 +3565,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "y18n": {
@@ -3869,15 +3587,15 @@
       "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
       "dev": true,
       "requires": {
-        "collection-visit": "1.0.0",
-        "component-emitter": "1.2.1",
-        "get-value": "2.0.6",
-        "has-value": "1.0.0",
-        "isobject": "3.0.1",
-        "set-value": "2.0.0",
-        "to-object-path": "0.3.0",
-        "union-value": "1.0.0",
-        "unset-value": "1.0.0"
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
       },
       "dependencies": {
         "isobject": {
@@ -3894,9 +3612,9 @@
       "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==",
       "dev": true,
       "requires": {
-        "array-back": "2.0.0",
-        "fs-then-native": "2.0.0",
-        "mkdirp2": "1.0.4"
+        "array-back": "^2.0.0",
+        "fs-then-native": "^2.0.0",
+        "mkdirp2": "^1.0.3"
       }
     },
     "call-me-maybe": {
@@ -3911,7 +3629,7 @@
       "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
       "dev": true,
       "requires": {
-        "callsites": "0.2.0"
+        "callsites": "^0.2.0"
       }
     },
     "callsites": {
@@ -3920,28 +3638,20 @@
       "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
       "dev": true
     },
-    "camel-case": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz",
-      "integrity": "sha1-Gsp8TRlTWaLOmVV5NDPG5VQlEfI=",
-      "requires": {
-        "sentence-case": "1.1.3",
-        "upper-case": "1.1.3"
-      }
-    },
     "camelcase": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
-      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+      "dev": true
     },
     "camelcase-keys": {
       "version": "2.1.0",
-      "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
       "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
       "dev": true,
       "requires": {
-        "camelcase": "2.1.1",
-        "map-obj": "1.0.1"
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
       },
       "dependencies": {
         "camelcase": {
@@ -3963,10 +3673,10 @@
       "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
       "dev": true,
       "requires": {
-        "browserslist": "1.7.7",
-        "caniuse-db": "1.0.30000899",
-        "lodash.memoize": "4.1.2",
-        "lodash.uniq": "4.5.0"
+        "browserslist": "^1.3.6",
+        "caniuse-db": "^1.0.30000529",
+        "lodash.memoize": "^4.1.2",
+        "lodash.uniq": "^4.5.0"
       },
       "dependencies": {
         "browserslist": {
@@ -3975,8 +3685,8 @@
           "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
           "dev": true,
           "requires": {
-            "caniuse-db": "1.0.30000899",
-            "electron-to-chromium": "1.3.82"
+            "caniuse-db": "^1.0.30000639",
+            "electron-to-chromium": "^1.2.7"
           }
         }
       }
@@ -3999,7 +3709,7 @@
       "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
       "dev": true,
       "requires": {
-        "rsvp": "3.6.2"
+        "rsvp": "^3.3.3"
       }
     },
     "caseless": {
@@ -4014,7 +3724,7 @@
       "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=",
       "dev": true,
       "requires": {
-        "underscore-contrib": "0.3.0"
+        "underscore-contrib": "~0.3.0"
       }
     },
     "ccount": {
@@ -4023,46 +3733,14 @@
       "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==",
       "dev": true
     },
-    "center-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
-      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
-      "requires": {
-        "align-text": "0.1.4",
-        "lazy-cache": "1.0.4"
-      }
-    },
     "chalk": {
       "version": "2.4.1",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
       "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
       "requires": {
-        "ansi-styles": "3.2.1",
-        "escape-string-regexp": "1.0.5",
-        "supports-color": "5.5.0"
-      }
-    },
-    "change-case": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.3.1.tgz",
-      "integrity": "sha1-LE/ePwY7tB0AzWjg1aCdthy+iU8=",
-      "requires": {
-        "camel-case": "1.2.2",
-        "constant-case": "1.1.2",
-        "dot-case": "1.1.2",
-        "is-lower-case": "1.1.3",
-        "is-upper-case": "1.1.2",
-        "lower-case": "1.1.4",
-        "lower-case-first": "1.0.2",
-        "param-case": "1.1.2",
-        "pascal-case": "1.1.2",
-        "path-case": "1.1.2",
-        "sentence-case": "1.1.3",
-        "snake-case": "1.1.2",
-        "swap-case": "1.1.2",
-        "title-case": "1.1.2",
-        "upper-case": "1.1.3",
-        "upper-case-first": "1.1.2"
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
       }
     },
     "character-entities": {
@@ -4095,11 +3773,6 @@
       "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
       "dev": true
     },
-    "charenc": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
-      "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
-    },
     "chokidar": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
@@ -4107,15 +3780,15 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "anymatch": "1.3.2",
-        "async-each": "1.0.1",
-        "fsevents": "1.2.4",
-        "glob-parent": "2.0.0",
-        "inherits": "2.0.3",
-        "is-binary-path": "1.0.1",
-        "is-glob": "2.0.1",
-        "path-is-absolute": "1.0.1",
-        "readdirp": "2.2.1"
+        "anymatch": "^1.3.0",
+        "async-each": "^1.0.0",
+        "fsevents": "^1.0.0",
+        "glob-parent": "^2.0.0",
+        "inherits": "^2.0.1",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^2.0.0",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.0.0"
       }
     },
     "chownr": {
@@ -4130,7 +3803,7 @@
       "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
       "dev": true,
       "requires": {
-        "tslib": "1.9.3"
+        "tslib": "^1.9.0"
       }
     },
     "ci-info": {
@@ -4145,8 +3818,8 @@
       "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "circular-json": {
@@ -4161,7 +3834,7 @@
       "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
       "dev": true,
       "requires": {
-        "chalk": "1.1.3"
+        "chalk": "^1.1.3"
       },
       "dependencies": {
         "ansi-styles": {
@@ -4172,15 +3845,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           }
         },
         "supports-color": {
@@ -4197,10 +3870,10 @@
       "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
       "dev": true,
       "requires": {
-        "arr-union": "3.1.0",
-        "define-property": "0.2.5",
-        "isobject": "3.0.1",
-        "static-extend": "0.1.2"
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
       },
       "dependencies": {
         "define-property": {
@@ -4209,7 +3882,7 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         },
         "isobject": {
@@ -4220,37 +3893,13 @@
         }
       }
     },
-    "classnames": {
-      "version": "2.2.6",
-      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
-      "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
-    },
-    "clean-css": {
-      "version": "3.4.28",
-      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
-      "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
-      "requires": {
-        "commander": "2.8.1",
-        "source-map": "0.4.4"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.8.1",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
-          "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
-          "requires": {
-            "graceful-readlink": "1.0.1"
-          }
-        }
-      }
-    },
     "cli-cursor": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
       "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
       "dev": true,
       "requires": {
-        "restore-cursor": "2.0.0"
+        "restore-cursor": "^2.0.0"
       }
     },
     "cli-width": {
@@ -4259,16 +3908,6 @@
       "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
       "dev": true
     },
-    "cliui": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
-      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
-      "requires": {
-        "center-align": "0.1.3",
-        "right-align": "0.1.3",
-        "wordwrap": "0.0.2"
-      }
-    },
     "clone": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
@@ -4281,10 +3920,10 @@
       "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
       "dev": true,
       "requires": {
-        "for-own": "1.0.0",
-        "is-plain-object": "2.0.4",
-        "kind-of": "6.0.2",
-        "shallow-clone": "1.0.0"
+        "for-own": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.0",
+        "shallow-clone": "^1.0.0"
       },
       "dependencies": {
         "for-own": {
@@ -4293,7 +3932,7 @@
           "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
           "dev": true,
           "requires": {
-            "for-in": "1.0.2"
+            "for-in": "^1.0.1"
           }
         },
         "kind-of": {
@@ -4310,8 +3949,8 @@
       "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==",
       "dev": true,
       "requires": {
-        "is-regexp": "1.0.0",
-        "is-supported-regexp-flag": "1.0.1"
+        "is-regexp": "^1.0.0",
+        "is-supported-regexp-flag": "^1.0.0"
       }
     },
     "co": {
@@ -4326,7 +3965,7 @@
       "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
       "dev": true,
       "requires": {
-        "q": "1.5.1"
+        "q": "^1.1.2"
       }
     },
     "code-point-at": {
@@ -4345,16 +3984,11 @@
       "dependencies": {
         "semver": {
           "version": "5.0.1",
-          "resolved": "http://registry.npmjs.org/semver/-/semver-5.0.1.tgz",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.1.tgz",
           "integrity": "sha1-n7P0AE+QDYPEeWj+QvdYPgWDLMk="
         }
       }
     },
-    "coffee-script": {
-      "version": "1.12.7",
-      "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
-      "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw=="
-    },
     "collapse-white-space": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz",
@@ -4367,8 +4001,8 @@
       "integrity": "sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==",
       "dev": true,
       "requires": {
-        "stream-connect": "1.0.2",
-        "stream-via": "1.0.4"
+        "stream-connect": "^1.0.2",
+        "stream-via": "^1.0.4"
       }
     },
     "collection-visit": {
@@ -4377,19 +4011,19 @@
       "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
       "dev": true,
       "requires": {
-        "map-visit": "1.0.0",
-        "object-visit": "1.0.1"
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
       }
     },
     "color": {
       "version": "0.11.4",
-      "resolved": "http://registry.npmjs.org/color/-/color-0.11.4.tgz",
+      "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
       "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
       "dev": true,
       "requires": {
-        "clone": "1.0.4",
-        "color-convert": "1.9.3",
-        "color-string": "0.3.0"
+        "clone": "^1.0.2",
+        "color-convert": "^1.3.0",
+        "color-string": "^0.3.0"
       }
     },
     "color-convert": {
@@ -4411,7 +4045,7 @@
       "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
       "dev": true,
       "requires": {
-        "color-name": "1.1.3"
+        "color-name": "^1.0.0"
       }
     },
     "colormin": {
@@ -4420,9 +4054,9 @@
       "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
       "dev": true,
       "requires": {
-        "color": "0.11.4",
+        "color": "^0.11.0",
         "css-color-names": "0.0.4",
-        "has": "1.0.3"
+        "has": "^1.0.1"
       }
     },
     "colors": {
@@ -4435,8 +4069,9 @@
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
       "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+      "dev": true,
       "requires": {
-        "delayed-stream": "1.0.0"
+        "delayed-stream": "~1.0.0"
       }
     },
     "command-line-args": {
@@ -4444,11 +4079,11 @@
       "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
       "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
       "requires": {
-        "argv-tools": "0.1.1",
-        "array-back": "2.0.0",
-        "find-replace": "2.0.1",
-        "lodash.camelcase": "4.3.0",
-        "typical": "2.6.1"
+        "argv-tools": "^0.1.1",
+        "array-back": "^2.0.0",
+        "find-replace": "^2.0.1",
+        "lodash.camelcase": "^4.3.0",
+        "typical": "^2.6.1"
       }
     },
     "command-line-tool": {
@@ -4457,11 +4092,11 @@
       "integrity": "sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==",
       "dev": true,
       "requires": {
-        "ansi-escape-sequences": "4.0.0",
-        "array-back": "2.0.0",
-        "command-line-args": "5.0.2",
-        "command-line-usage": "4.1.0",
-        "typical": "2.6.1"
+        "ansi-escape-sequences": "^4.0.0",
+        "array-back": "^2.0.0",
+        "command-line-args": "^5.0.0",
+        "command-line-usage": "^4.1.0",
+        "typical": "^2.6.1"
       },
       "dependencies": {
         "command-line-usage": {
@@ -4470,10 +4105,10 @@
           "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
           "dev": true,
           "requires": {
-            "ansi-escape-sequences": "4.0.0",
-            "array-back": "2.0.0",
-            "table-layout": "0.4.4",
-            "typical": "2.6.1"
+            "ansi-escape-sequences": "^4.0.0",
+            "array-back": "^2.0.0",
+            "table-layout": "^0.4.2",
+            "typical": "^2.6.1"
           }
         }
       }
@@ -4483,18 +4118,10 @@
       "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz",
       "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==",
       "requires": {
-        "array-back": "2.0.0",
-        "chalk": "2.4.1",
-        "table-layout": "0.4.4",
-        "typical": "2.6.1"
-      }
-    },
-    "commander": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
-      "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
-      "requires": {
-        "graceful-readlink": "1.0.1"
+        "array-back": "^2.0.0",
+        "chalk": "^2.4.1",
+        "table-layout": "^0.4.3",
+        "typical": "^2.6.1"
       }
     },
     "common-sequence": {
@@ -4509,33 +4136,18 @@
       "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
       "dev": true
     },
-    "commoner": {
-      "version": "0.10.8",
-      "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
-      "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=",
-      "requires": {
-        "commander": "2.9.0",
-        "detective": "4.7.1",
-        "glob": "5.0.15",
-        "graceful-fs": "4.1.11",
-        "iconv-lite": "0.4.24",
-        "mkdirp": "0.5.1",
-        "private": "0.1.8",
-        "q": "1.5.1",
-        "recast": "0.11.23"
-      }
-    },
     "component-emitter": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+      "dev": true
     },
     "compressible": {
       "version": "2.0.15",
       "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
       "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==",
       "requires": {
-        "mime-db": "1.37.0"
+        "mime-db": ">= 1.36.0 < 2"
       }
     },
     "compression": {
@@ -4543,13 +4155,13 @@
       "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
       "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
       "requires": {
-        "accepts": "1.3.5",
+        "accepts": "~1.3.5",
         "bytes": "3.0.0",
-        "compressible": "2.0.15",
+        "compressible": "~2.0.14",
         "debug": "2.6.9",
-        "on-headers": "1.0.1",
+        "on-headers": "~1.0.1",
         "safe-buffer": "5.1.2",
-        "vary": "1.1.2"
+        "vary": "~1.1.2"
       },
       "dependencies": {
         "debug": {
@@ -4570,16 +4182,18 @@
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
     },
     "concat-stream": {
       "version": "1.5.2",
       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
       "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+      "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "readable-stream": "2.0.6",
-        "typedarray": "0.0.6"
+        "inherits": "~2.0.1",
+        "readable-stream": "~2.0.0",
+        "typedarray": "~0.0.5"
       }
     },
     "config": {
@@ -4587,7 +4201,7 @@
       "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz",
       "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==",
       "requires": {
-        "json5": "1.0.1"
+        "json5": "^1.0.1"
       }
     },
     "config-master": {
@@ -4596,7 +4210,7 @@
       "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=",
       "dev": true,
       "requires": {
-        "walk-back": "2.0.1"
+        "walk-back": "^2.0.1"
       },
       "dependencies": {
         "walk-back": {
@@ -4613,7 +4227,7 @@
       "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
       "dev": true,
       "requires": {
-        "date-now": "0.1.4"
+        "date-now": "^0.1.4"
       }
     },
     "console-control-strings": {
@@ -4622,15 +4236,6 @@
       "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
       "dev": true
     },
-    "constant-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz",
-      "integrity": "sha1-jsLKW6ND4Aqjjb9OIA/VrJB+/WM=",
-      "requires": {
-        "snake-case": "1.1.2",
-        "upper-case": "1.1.3"
-      }
-    },
     "constants-browserify": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
@@ -4664,7 +4269,7 @@
       "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "~5.1.1"
       }
     },
     "cookie": {
@@ -4686,23 +4291,18 @@
       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
       "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
     },
-    "cookiejar": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
-      "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
-    },
     "copy-concurrently": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
       "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0",
-        "fs-write-stream-atomic": "1.0.10",
-        "iferr": "0.1.5",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2",
-        "run-queue": "1.0.3"
+        "aproba": "^1.1.1",
+        "fs-write-stream-atomic": "^1.0.8",
+        "iferr": "^0.1.5",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.0"
       }
     },
     "copy-descriptor": {
@@ -4727,10 +4327,10 @@
       "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
       "dev": true,
       "requires": {
-        "is-directory": "0.3.1",
-        "js-yaml": "3.12.0",
-        "parse-json": "4.0.0",
-        "require-from-string": "2.0.2"
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.9.0",
+        "parse-json": "^4.0.0",
+        "require-from-string": "^2.0.1"
       },
       "dependencies": {
         "esprima": {
@@ -4745,8 +4345,8 @@
           "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
           "dev": true,
           "requires": {
-            "argparse": "1.0.10",
-            "esprima": "4.0.1"
+            "argparse": "^1.0.7",
+            "esprima": "^4.0.0"
           }
         },
         "parse-json": {
@@ -4755,8 +4355,8 @@
           "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
           "dev": true,
           "requires": {
-            "error-ex": "1.3.2",
-            "json-parse-better-errors": "1.0.2"
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
           }
         }
       }
@@ -4767,66 +4367,35 @@
       "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "elliptic": "6.4.1"
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.0.0"
       }
     },
     "create-hash": {
       "version": "1.2.0",
-      "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
       "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "inherits": "2.0.3",
-        "md5.js": "1.3.5",
-        "ripemd160": "2.0.2",
-        "sha.js": "2.4.11"
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
       }
     },
     "create-hmac": {
       "version": "1.1.7",
-      "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
       "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
       "dev": true,
       "requires": {
-        "cipher-base": "1.0.4",
-        "create-hash": "1.2.0",
-        "inherits": "2.0.3",
-        "ripemd160": "2.0.2",
-        "safe-buffer": "5.1.2",
-        "sha.js": "2.4.11"
-      }
-    },
-    "create-react-class": {
-      "version": "15.6.3",
-      "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
-      "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
-      "requires": {
-        "fbjs": "0.8.17",
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1"
-      },
-      "dependencies": {
-        "core-js": {
-          "version": "1.2.7",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
-          "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
-        },
-        "fbjs": {
-          "version": "0.8.17",
-          "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
-          "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
-          "requires": {
-            "core-js": "1.2.7",
-            "isomorphic-fetch": "2.2.1",
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "promise": "7.3.1",
-            "setimmediate": "1.0.5",
-            "ua-parser-js": "0.7.19"
-          }
-        }
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
     "cross-spawn": {
@@ -4835,33 +4404,28 @@
       "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
       "dev": true,
       "requires": {
-        "lru-cache": "4.1.3",
-        "shebang-command": "1.2.0",
-        "which": "1.3.1"
+        "lru-cache": "^4.0.1",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
       }
     },
-    "crypt": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
-      "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
-    },
     "crypto-browserify": {
       "version": "3.12.0",
       "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
       "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
       "dev": true,
       "requires": {
-        "browserify-cipher": "1.0.1",
-        "browserify-sign": "4.0.4",
-        "create-ecdh": "4.0.3",
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "diffie-hellman": "5.0.3",
-        "inherits": "2.0.3",
-        "pbkdf2": "3.0.17",
-        "public-encrypt": "4.0.3",
-        "randombytes": "2.0.6",
-        "randomfill": "1.0.4"
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
       }
     },
     "css": {
@@ -4870,10 +4434,10 @@
       "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "source-map": "0.6.1",
-        "source-map-resolve": "0.5.2",
-        "urix": "0.1.0"
+        "inherits": "^2.0.3",
+        "source-map": "^0.6.1",
+        "source-map-resolve": "^0.5.2",
+        "urix": "^0.1.0"
       },
       "dependencies": {
         "source-map": {
@@ -4886,30 +4450,30 @@
     },
     "css-color-names": {
       "version": "0.0.4",
-      "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+      "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
       "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
       "dev": true
     },
     "css-loader": {
       "version": "0.28.11",
-      "resolved": "http://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz",
       "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==",
       "dev": true,
       "requires": {
-        "babel-code-frame": "6.26.0",
-        "css-selector-tokenizer": "0.7.0",
-        "cssnano": "3.10.0",
-        "icss-utils": "2.1.0",
-        "loader-utils": "1.1.0",
-        "lodash.camelcase": "4.3.0",
-        "object-assign": "4.1.1",
-        "postcss": "5.2.18",
-        "postcss-modules-extract-imports": "1.2.0",
-        "postcss-modules-local-by-default": "1.2.0",
-        "postcss-modules-scope": "1.1.0",
-        "postcss-modules-values": "1.3.0",
-        "postcss-value-parser": "3.3.1",
-        "source-list-map": "2.0.1"
+        "babel-code-frame": "^6.26.0",
+        "css-selector-tokenizer": "^0.7.0",
+        "cssnano": "^3.10.0",
+        "icss-utils": "^2.1.0",
+        "loader-utils": "^1.0.2",
+        "lodash.camelcase": "^4.3.0",
+        "object-assign": "^4.1.1",
+        "postcss": "^5.0.6",
+        "postcss-modules-extract-imports": "^1.2.0",
+        "postcss-modules-local-by-default": "^1.2.0",
+        "postcss-modules-scope": "^1.1.0",
+        "postcss-modules-values": "^1.3.0",
+        "postcss-value-parser": "^3.3.0",
+        "source-list-map": "^2.0.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -4930,7 +4494,7 @@
           "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
           "dev": true,
           "requires": {
-            "postcss": "6.0.23"
+            "postcss": "^6.0.1"
           },
           "dependencies": {
             "postcss": {
@@ -4939,9 +4503,9 @@
               "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
               "dev": true,
               "requires": {
-                "chalk": "2.4.1",
-                "source-map": "0.6.1",
-                "supports-color": "5.5.0"
+                "chalk": "^2.4.1",
+                "source-map": "^0.6.1",
+                "supports-color": "^5.4.0"
               }
             }
           }
@@ -4952,23 +4516,23 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           },
           "dependencies": {
             "chalk": {
               "version": "1.1.3",
-              "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+              "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
               "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
               "dev": true,
               "requires": {
-                "ansi-styles": "2.2.1",
-                "escape-string-regexp": "1.0.5",
-                "has-ansi": "2.0.0",
-                "strip-ansi": "3.0.1",
-                "supports-color": "2.0.0"
+                "ansi-styles": "^2.2.1",
+                "escape-string-regexp": "^1.0.2",
+                "has-ansi": "^2.0.0",
+                "strip-ansi": "^3.0.0",
+                "supports-color": "^2.0.0"
               },
               "dependencies": {
                 "supports-color": {
@@ -4991,7 +4555,7 @@
               "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
               "dev": true,
               "requires": {
-                "has-flag": "1.0.0"
+                "has-flag": "^1.0.0"
               }
             }
           }
@@ -5002,7 +4566,7 @@
           "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=",
           "dev": true,
           "requires": {
-            "postcss": "6.0.23"
+            "postcss": "^6.0.1"
           },
           "dependencies": {
             "postcss": {
@@ -5011,9 +4575,9 @@
               "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
               "dev": true,
               "requires": {
-                "chalk": "2.4.1",
-                "source-map": "0.6.1",
-                "supports-color": "5.5.0"
+                "chalk": "^2.4.1",
+                "source-map": "^0.6.1",
+                "supports-color": "^5.4.0"
               }
             }
           }
@@ -5048,15 +4612,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -5079,9 +4643,9 @@
           "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -5096,7 +4660,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -5107,18 +4671,18 @@
       "integrity": "sha1-Z5LKQSsV4j5vm+agfc739Xf/kE0=",
       "dev": true,
       "requires": {
-        "debug": "2.6.9",
-        "generic-names": "1.0.3",
-        "glob-to-regexp": "0.3.0",
-        "icss-replace-symbols": "1.1.0",
-        "lodash": "4.17.11",
-        "postcss": "6.0.23",
-        "postcss-modules-extract-imports": "1.1.0",
-        "postcss-modules-local-by-default": "1.2.0",
-        "postcss-modules-resolve-imports": "1.3.0",
-        "postcss-modules-scope": "1.1.0",
-        "postcss-modules-values": "1.3.0",
-        "seekout": "1.0.2"
+        "debug": "^2.2.0",
+        "generic-names": "^1.0.1",
+        "glob-to-regexp": "^0.3.0",
+        "icss-replace-symbols": "^1.0.2",
+        "lodash": "^4.3.0",
+        "postcss": "^6.0.1",
+        "postcss-modules-extract-imports": "^1.0.0",
+        "postcss-modules-local-by-default": "^1.0.1",
+        "postcss-modules-resolve-imports": "^1.3.0",
+        "postcss-modules-scope": "^1.0.0",
+        "postcss-modules-values": "^1.1.1",
+        "seekout": "^1.0.1"
       },
       "dependencies": {
         "debug": {
@@ -5144,9 +4708,9 @@
       "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
       "dev": true,
       "requires": {
-        "cssesc": "0.1.0",
-        "fastparse": "1.1.1",
-        "regexpu-core": "1.0.0"
+        "cssesc": "^0.1.0",
+        "fastparse": "^1.1.1",
+        "regexpu-core": "^1.0.0"
       }
     },
     "cssesc": {
@@ -5157,42 +4721,42 @@
     },
     "cssnano": {
       "version": "3.10.0",
-      "resolved": "http://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
       "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
       "dev": true,
       "requires": {
-        "autoprefixer": "6.7.7",
-        "decamelize": "1.2.0",
-        "defined": "1.0.0",
-        "has": "1.0.3",
-        "object-assign": "4.1.1",
-        "postcss": "5.2.18",
-        "postcss-calc": "5.3.1",
-        "postcss-colormin": "2.2.2",
-        "postcss-convert-values": "2.6.1",
-        "postcss-discard-comments": "2.0.4",
-        "postcss-discard-duplicates": "2.1.0",
-        "postcss-discard-empty": "2.1.0",
-        "postcss-discard-overridden": "0.1.1",
-        "postcss-discard-unused": "2.2.3",
-        "postcss-filter-plugins": "2.0.3",
-        "postcss-merge-idents": "2.1.7",
-        "postcss-merge-longhand": "2.0.2",
-        "postcss-merge-rules": "2.1.2",
-        "postcss-minify-font-values": "1.0.5",
-        "postcss-minify-gradients": "1.0.5",
-        "postcss-minify-params": "1.2.2",
-        "postcss-minify-selectors": "2.1.1",
-        "postcss-normalize-charset": "1.1.1",
-        "postcss-normalize-url": "3.0.8",
-        "postcss-ordered-values": "2.2.3",
-        "postcss-reduce-idents": "2.4.0",
-        "postcss-reduce-initial": "1.0.1",
-        "postcss-reduce-transforms": "1.0.4",
-        "postcss-svgo": "2.1.6",
-        "postcss-unique-selectors": "2.0.2",
-        "postcss-value-parser": "3.3.1",
-        "postcss-zindex": "2.2.0"
+        "autoprefixer": "^6.3.1",
+        "decamelize": "^1.1.2",
+        "defined": "^1.0.0",
+        "has": "^1.0.1",
+        "object-assign": "^4.0.1",
+        "postcss": "^5.0.14",
+        "postcss-calc": "^5.2.0",
+        "postcss-colormin": "^2.1.8",
+        "postcss-convert-values": "^2.3.4",
+        "postcss-discard-comments": "^2.0.4",
+        "postcss-discard-duplicates": "^2.0.1",
+        "postcss-discard-empty": "^2.0.1",
+        "postcss-discard-overridden": "^0.1.1",
+        "postcss-discard-unused": "^2.2.1",
+        "postcss-filter-plugins": "^2.0.0",
+        "postcss-merge-idents": "^2.1.5",
+        "postcss-merge-longhand": "^2.0.1",
+        "postcss-merge-rules": "^2.0.3",
+        "postcss-minify-font-values": "^1.0.2",
+        "postcss-minify-gradients": "^1.0.1",
+        "postcss-minify-params": "^1.0.4",
+        "postcss-minify-selectors": "^2.0.4",
+        "postcss-normalize-charset": "^1.1.0",
+        "postcss-normalize-url": "^3.0.7",
+        "postcss-ordered-values": "^2.1.0",
+        "postcss-reduce-idents": "^2.2.2",
+        "postcss-reduce-initial": "^1.0.0",
+        "postcss-reduce-transforms": "^1.0.3",
+        "postcss-svgo": "^2.1.1",
+        "postcss-unique-selectors": "^2.0.2",
+        "postcss-value-parser": "^3.2.3",
+        "postcss-zindex": "^2.0.1"
       },
       "dependencies": {
         "ansi-styles": {
@@ -5207,12 +4771,12 @@
           "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
           "dev": true,
           "requires": {
-            "browserslist": "1.7.7",
-            "caniuse-db": "1.0.30000899",
-            "normalize-range": "0.1.2",
-            "num2fraction": "1.2.2",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.1"
+            "browserslist": "^1.7.6",
+            "caniuse-db": "^1.0.30000634",
+            "normalize-range": "^0.1.2",
+            "num2fraction": "^1.2.2",
+            "postcss": "^5.2.16",
+            "postcss-value-parser": "^3.2.3"
           }
         },
         "browserslist": {
@@ -5221,21 +4785,21 @@
           "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
           "dev": true,
           "requires": {
-            "caniuse-db": "1.0.30000899",
-            "electron-to-chromium": "1.3.82"
+            "caniuse-db": "^1.0.30000639",
+            "electron-to-chromium": "^1.2.7"
           }
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -5258,10 +4822,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -5276,7 +4840,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -5287,8 +4851,8 @@
       "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
       "dev": true,
       "requires": {
-        "clap": "1.2.3",
-        "source-map": "0.5.7"
+        "clap": "^1.0.9",
+        "source-map": "^0.5.3"
       },
       "dependencies": {
         "source-map": {
@@ -5311,7 +4875,7 @@
       "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
       "dev": true,
       "requires": {
-        "cssom": "0.3.4"
+        "cssom": "0.3.x"
       }
     },
     "currently-unhandled": {
@@ -5320,7 +4884,7 @@
       "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
       "dev": true,
       "requires": {
-        "array-find-index": "1.0.2"
+        "array-find-index": "^1.0.1"
       }
     },
     "cyclist": {
@@ -5341,7 +4905,7 @@
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
       "dev": true,
       "requires": {
-        "assert-plus": "1.0.0"
+        "assert-plus": "^1.0.0"
       }
     },
     "dasherize": {
@@ -5355,9 +4919,9 @@
       "integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==",
       "dev": true,
       "requires": {
-        "abab": "2.0.0",
-        "whatwg-mimetype": "2.2.0",
-        "whatwg-url": "7.0.0"
+        "abab": "^2.0.0",
+        "whatwg-mimetype": "^2.1.0",
+        "whatwg-url": "^7.0.0"
       },
       "dependencies": {
         "whatwg-url": {
@@ -5366,9 +4930,9 @@
           "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
           "dev": true,
           "requires": {
-            "lodash.sortby": "4.7.0",
-            "tr46": "1.0.1",
-            "webidl-conversions": "4.0.2"
+            "lodash.sortby": "^4.7.0",
+            "tr46": "^1.0.1",
+            "webidl-conversions": "^4.0.2"
           }
         }
       }
@@ -5384,13 +4948,14 @@
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
       "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
       "requires": {
-        "ms": "2.1.1"
+        "ms": "^2.1.1"
       }
     },
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
     },
     "decamelize-keys": {
       "version": "1.1.0",
@@ -5398,8 +4963,8 @@
       "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
       "dev": true,
       "requires": {
-        "decamelize": "1.2.0",
-        "map-obj": "1.0.1"
+        "decamelize": "^1.1.0",
+        "map-obj": "^1.0.0"
       }
     },
     "decode-uri-component": {
@@ -5408,11 +4973,6 @@
       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
       "dev": true
     },
-    "deep-diff": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.4.tgz",
-      "integrity": "sha1-qsXDmVIjar5fA3ojSQYLoBsArkg="
-    },
     "deep-equal": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
@@ -5435,7 +4995,7 @@
       "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
       "dev": true,
       "requires": {
-        "strip-bom": "2.0.0"
+        "strip-bom": "^2.0.0"
       },
       "dependencies": {
         "strip-bom": {
@@ -5444,7 +5004,7 @@
           "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
           "dev": true,
           "requires": {
-            "is-utf8": "0.2.1"
+            "is-utf8": "^0.2.0"
           }
         }
       }
@@ -5455,7 +5015,7 @@
       "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
       "dev": true,
       "requires": {
-        "object-keys": "1.0.12"
+        "object-keys": "^1.0.12"
       },
       "dependencies": {
         "object-keys": {
@@ -5472,8 +5032,8 @@
       "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
       "dev": true,
       "requires": {
-        "is-descriptor": "1.0.2",
-        "isobject": "3.0.1"
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
       },
       "dependencies": {
         "is-accessor-descriptor": {
@@ -5482,7 +5042,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -5491,7 +5051,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -5500,9 +5060,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "isobject": {
@@ -5522,7 +5082,8 @@
     "defined": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
-      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+      "dev": true
     },
     "del": {
       "version": "2.2.2",
@@ -5530,13 +5091,13 @@
       "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
       "dev": true,
       "requires": {
-        "globby": "5.0.0",
-        "is-path-cwd": "1.0.0",
-        "is-path-in-cwd": "1.0.1",
-        "object-assign": "4.1.1",
-        "pify": "2.3.0",
-        "pinkie-promise": "2.0.1",
-        "rimraf": "2.6.2"
+        "globby": "^5.0.0",
+        "is-path-cwd": "^1.0.0",
+        "is-path-in-cwd": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "rimraf": "^2.2.8"
       },
       "dependencies": {
         "pify": {
@@ -5550,13 +5111,13 @@
     "delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
     },
     "delegates": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
-      "dev": true
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
     },
     "depd": {
       "version": "1.1.2",
@@ -5569,8 +5130,8 @@
       "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
       }
     },
     "destroy": {
@@ -5584,24 +5145,22 @@
       "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
       "dev": true,
       "requires": {
-        "repeating": "2.0.1"
+        "repeating": "^2.0.0"
       }
     },
+    "detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+      "dev": true,
+      "optional": true
+    },
     "detect-newline": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
       "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
       "dev": true
     },
-    "detective": {
-      "version": "4.7.1",
-      "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
-      "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
-      "requires": {
-        "acorn": "5.7.3",
-        "defined": "1.0.0"
-      }
-    },
     "diff": {
       "version": "3.5.0",
       "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
@@ -5610,13 +5169,13 @@
     },
     "diffie-hellman": {
       "version": "5.0.3",
-      "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
       "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "miller-rabin": "4.0.1",
-        "randombytes": "2.0.6"
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
       }
     },
     "dir-glob": {
@@ -5625,8 +5184,8 @@
       "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
       "dev": true,
       "requires": {
-        "arrify": "1.0.1",
-        "path-type": "3.0.0"
+        "arrify": "^1.0.1",
+        "path-type": "^3.0.0"
       },
       "dependencies": {
         "path-type": {
@@ -5635,7 +5194,7 @@
           "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
           "dev": true,
           "requires": {
-            "pify": "3.0.0"
+            "pify": "^3.0.0"
           }
         }
       }
@@ -5646,18 +5205,18 @@
       "integrity": "sha512-FV/417bH2c/CYpe8BjFEAHoaHaItcJnPlKELi/qyPZdmUom8joyuC78OhhfPUdyKD/WcouTQ2LxQT4M/RoiJ3w==",
       "dev": true,
       "requires": {
-        "array-back": "2.0.0",
-        "cache-point": "0.4.1",
-        "common-sequence": "1.0.2",
-        "file-set": "2.0.1",
-        "handlebars": "4.0.12",
-        "marked": "0.3.19",
-        "object-get": "2.1.0",
-        "reduce-flatten": "1.0.1",
-        "reduce-unique": "1.0.0",
-        "reduce-without": "1.0.1",
-        "test-value": "3.0.0",
-        "walk-back": "3.0.0"
+        "array-back": "^2.0.0",
+        "cache-point": "^0.4.1",
+        "common-sequence": "^1.0.2",
+        "file-set": "^2.0.0",
+        "handlebars": "^4.0.11",
+        "marked": "^0.3.16",
+        "object-get": "^2.1.0",
+        "reduce-flatten": "^1.0.1",
+        "reduce-unique": "^1.0.0",
+        "reduce-without": "^1.0.1",
+        "test-value": "^3.0.0",
+        "walk-back": "^3.0.0"
       }
     },
     "dns-prefetch-control": {
@@ -5671,15 +5230,7 @@
       "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
       "dev": true,
       "requires": {
-        "esutils": "2.0.2"
-      }
-    },
-    "dom-helpers": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
-      "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
-      "requires": {
-        "@babel/runtime": "7.4.2"
+        "esutils": "^2.0.2"
       }
     },
     "dom-serializer": {
@@ -5688,8 +5239,8 @@
       "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
       "dev": true,
       "requires": {
-        "domelementtype": "1.1.3",
-        "entities": "1.1.2"
+        "domelementtype": "~1.1.1",
+        "entities": "~1.1.1"
       },
       "dependencies": {
         "domelementtype": {
@@ -5724,7 +5275,7 @@
       "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
       "dev": true,
       "requires": {
-        "webidl-conversions": "4.0.2"
+        "webidl-conversions": "^4.0.2"
       }
     },
     "domhandler": {
@@ -5733,7 +5284,7 @@
       "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
       "dev": true,
       "requires": {
-        "domelementtype": "1.3.0"
+        "domelementtype": "1"
       }
     },
     "domutils": {
@@ -5742,8 +5293,8 @@
       "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
       "dev": true,
       "requires": {
-        "dom-serializer": "0.1.0",
-        "domelementtype": "1.3.0"
+        "dom-serializer": "0",
+        "domelementtype": "1"
       }
     },
     "dont-sniff-mimetype": {
@@ -5751,21 +5302,13 @@
       "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz",
       "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g="
     },
-    "dot-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz",
-      "integrity": "sha1-HnOCaQDeKNbeVIC8HeMdCEKwa+w=",
-      "requires": {
-        "sentence-case": "1.1.3"
-      }
-    },
     "dot-prop": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
       "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
       "dev": true,
       "requires": {
-        "is-obj": "1.0.1"
+        "is-obj": "^1.0.0"
       }
     },
     "duplexify": {
@@ -5774,10 +5317,10 @@
       "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.1",
-        "inherits": "2.0.3",
-        "readable-stream": "2.0.6",
-        "stream-shift": "1.0.0"
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
       }
     },
     "ecc-jsbn": {
@@ -5786,8 +5329,8 @@
       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
       "dev": true,
       "requires": {
-        "jsbn": "0.1.1",
-        "safer-buffer": "2.1.2"
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
       }
     },
     "ee-first": {
@@ -5807,13 +5350,13 @@
       "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "brorand": "1.1.0",
-        "hash.js": "1.1.5",
-        "hmac-drbg": "1.0.1",
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1",
-        "minimalistic-crypto-utils": "1.0.1"
+        "bn.js": "^4.4.0",
+        "brorand": "^1.0.1",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.0"
       }
     },
     "emoji-regex": {
@@ -5838,7 +5381,7 @@
       "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
       "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
       "requires": {
-        "iconv-lite": "0.4.24"
+        "iconv-lite": "~0.4.13"
       }
     },
     "end-of-stream": {
@@ -5847,7 +5390,7 @@
       "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
       "dev": true,
       "requires": {
-        "once": "1.4.0"
+        "once": "^1.4.0"
       }
     },
     "enhanced-resolve": {
@@ -5856,9 +5399,9 @@
       "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "memory-fs": "0.4.1",
-        "tapable": "1.1.0"
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.4.0",
+        "tapable": "^1.0.0"
       }
     },
     "entities": {
@@ -5867,22 +5410,13 @@
       "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
       "dev": true
     },
-    "envify": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/envify/-/envify-3.4.1.tgz",
-      "integrity": "sha1-1xIjKejfFoi6dxsSUBkXyc5cvOg=",
-      "requires": {
-        "jstransform": "11.0.3",
-        "through": "2.3.8"
-      }
-    },
     "errno": {
       "version": "0.1.7",
       "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
       "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
       "dev": true,
       "requires": {
-        "prr": "1.0.1"
+        "prr": "~1.0.1"
       }
     },
     "error-ex": {
@@ -5891,7 +5425,7 @@
       "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
       "dev": true,
       "requires": {
-        "is-arrayish": "0.2.1"
+        "is-arrayish": "^0.2.1"
       }
     },
     "es-abstract": {
@@ -5900,11 +5434,11 @@
       "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
       "dev": true,
       "requires": {
-        "es-to-primitive": "1.2.0",
-        "function-bind": "1.1.1",
-        "has": "1.0.3",
-        "is-callable": "1.1.4",
-        "is-regex": "1.0.4"
+        "es-to-primitive": "^1.1.1",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.1",
+        "is-callable": "^1.1.3",
+        "is-regex": "^1.0.4"
       }
     },
     "es-to-primitive": {
@@ -5913,9 +5447,9 @@
       "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
       "dev": true,
       "requires": {
-        "is-callable": "1.1.4",
-        "is-date-object": "1.0.1",
-        "is-symbol": "1.0.2"
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
       }
     },
     "escape-html": {
@@ -5934,11 +5468,11 @@
       "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
       "dev": true,
       "requires": {
-        "esprima": "3.1.3",
-        "estraverse": "4.2.0",
-        "esutils": "2.0.2",
-        "optionator": "0.8.2",
-        "source-map": "0.6.1"
+        "esprima": "^3.1.3",
+        "estraverse": "^4.2.0",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1",
+        "source-map": "~0.6.1"
       },
       "dependencies": {
         "esprima": {
@@ -5958,48 +5492,48 @@
     },
     "eslint": {
       "version": "4.19.1",
-      "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
       "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
       "dev": true,
       "requires": {
-        "ajv": "5.5.2",
-        "babel-code-frame": "6.26.0",
-        "chalk": "2.4.1",
-        "concat-stream": "1.6.2",
-        "cross-spawn": "5.1.0",
-        "debug": "3.2.6",
-        "doctrine": "2.1.0",
-        "eslint-scope": "3.7.1",
-        "eslint-visitor-keys": "1.0.0",
-        "espree": "3.5.4",
-        "esquery": "1.0.1",
-        "esutils": "2.0.2",
-        "file-entry-cache": "2.0.0",
-        "functional-red-black-tree": "1.0.1",
-        "glob": "7.1.3",
-        "globals": "11.8.0",
-        "ignore": "3.3.10",
-        "imurmurhash": "0.1.4",
-        "inquirer": "3.3.0",
-        "is-resolvable": "1.1.0",
-        "js-yaml": "3.12.0",
-        "json-stable-stringify-without-jsonify": "1.0.1",
-        "levn": "0.3.0",
-        "lodash": "4.17.11",
-        "minimatch": "3.0.4",
-        "mkdirp": "0.5.1",
-        "natural-compare": "1.4.0",
-        "optionator": "0.8.2",
-        "path-is-inside": "1.0.2",
-        "pluralize": "7.0.0",
-        "progress": "2.0.1",
-        "regexpp": "1.1.0",
-        "require-uncached": "1.0.3",
-        "semver": "5.6.0",
-        "strip-ansi": "4.0.0",
-        "strip-json-comments": "2.0.1",
+        "ajv": "^5.3.0",
+        "babel-code-frame": "^6.22.0",
+        "chalk": "^2.1.0",
+        "concat-stream": "^1.6.0",
+        "cross-spawn": "^5.1.0",
+        "debug": "^3.1.0",
+        "doctrine": "^2.1.0",
+        "eslint-scope": "^3.7.1",
+        "eslint-visitor-keys": "^1.0.0",
+        "espree": "^3.5.4",
+        "esquery": "^1.0.0",
+        "esutils": "^2.0.2",
+        "file-entry-cache": "^2.0.0",
+        "functional-red-black-tree": "^1.0.1",
+        "glob": "^7.1.2",
+        "globals": "^11.0.1",
+        "ignore": "^3.3.3",
+        "imurmurhash": "^0.1.4",
+        "inquirer": "^3.0.6",
+        "is-resolvable": "^1.0.0",
+        "js-yaml": "^3.9.1",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.3.0",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.2",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.8.2",
+        "path-is-inside": "^1.0.2",
+        "pluralize": "^7.0.0",
+        "progress": "^2.0.0",
+        "regexpp": "^1.0.1",
+        "require-uncached": "^1.0.3",
+        "semver": "^5.3.0",
+        "strip-ansi": "^4.0.0",
+        "strip-json-comments": "~2.0.1",
         "table": "4.0.2",
-        "text-table": "0.2.0"
+        "text-table": "~0.2.0"
       },
       "dependencies": {
         "ajv": {
@@ -6008,10 +5542,10 @@
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "ansi-regex": {
@@ -6026,10 +5560,10 @@
           "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
           "dev": true,
           "requires": {
-            "buffer-from": "1.1.1",
-            "inherits": "2.0.3",
-            "readable-stream": "2.3.6",
-            "typedarray": "0.0.6"
+            "buffer-from": "^1.0.0",
+            "inherits": "^2.0.3",
+            "readable-stream": "^2.2.2",
+            "typedarray": "^0.0.6"
           }
         },
         "debug": {
@@ -6038,7 +5572,7 @@
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "esprima": {
@@ -6059,12 +5593,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "globals": {
@@ -6079,8 +5613,8 @@
           "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
           "dev": true,
           "requires": {
-            "argparse": "1.0.10",
-            "esprima": "4.0.1"
+            "argparse": "^1.0.7",
+            "esprima": "^4.0.0"
           }
         },
         "json-schema-traverse": {
@@ -6097,17 +5631,17 @@
         },
         "readable-stream": {
           "version": "2.3.6",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
           "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
           "dev": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "semver": {
@@ -6122,7 +5656,7 @@
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         },
         "strip-ansi": {
@@ -6131,7 +5665,7 @@
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "3.0.0"
+            "ansi-regex": "^3.0.0"
           }
         }
       }
@@ -6142,9 +5676,9 @@
       "integrity": "sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw==",
       "dev": true,
       "requires": {
-        "eslint-config-airbnb-base": "13.1.0",
-        "object.assign": "4.1.0",
-        "object.entries": "1.0.4"
+        "eslint-config-airbnb-base": "^13.1.0",
+        "object.assign": "^4.1.0",
+        "object.entries": "^1.0.4"
       }
     },
     "eslint-config-airbnb-base": {
@@ -6153,9 +5687,9 @@
       "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==",
       "dev": true,
       "requires": {
-        "eslint-restricted-globals": "0.1.1",
-        "object.assign": "4.1.0",
-        "object.entries": "1.0.4"
+        "eslint-restricted-globals": "^0.1.1",
+        "object.assign": "^4.1.0",
+        "object.entries": "^1.0.4"
       }
     },
     "eslint-import-resolver-babel-module": {
@@ -6164,8 +5698,8 @@
       "integrity": "sha512-aPj0+pG0H3HCaMD9eRDYEzPdMyKrLE2oNhAzTXd2w86ZBe3s7drSrrPwVTfzO1CBp13FGk8S84oRmZHZvSo0mA==",
       "dev": true,
       "requires": {
-        "pkg-up": "2.0.0",
-        "resolve": "1.8.1"
+        "pkg-up": "^2.0.0",
+        "resolve": "^1.4.0"
       }
     },
     "eslint-import-resolver-node": {
@@ -6174,8 +5708,8 @@
       "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
       "dev": true,
       "requires": {
-        "debug": "2.6.9",
-        "resolve": "1.8.1"
+        "debug": "^2.6.9",
+        "resolve": "^1.5.0"
       },
       "dependencies": {
         "debug": {
@@ -6201,8 +5735,8 @@
       "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
       "dev": true,
       "requires": {
-        "debug": "2.6.9",
-        "pkg-dir": "1.0.0"
+        "debug": "^2.6.8",
+        "pkg-dir": "^1.0.0"
       },
       "dependencies": {
         "debug": {
@@ -6220,8 +5754,8 @@
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "dev": true,
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "ms": {
@@ -6236,7 +5770,7 @@
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "dev": true,
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         },
         "pkg-dir": {
@@ -6245,7 +5779,7 @@
           "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
           "dev": true,
           "requires": {
-            "find-up": "1.1.2"
+            "find-up": "^1.0.0"
           }
         }
       }
@@ -6256,16 +5790,16 @@
       "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==",
       "dev": true,
       "requires": {
-        "contains-path": "0.1.0",
-        "debug": "2.6.9",
+        "contains-path": "^0.1.0",
+        "debug": "^2.6.8",
         "doctrine": "1.5.0",
-        "eslint-import-resolver-node": "0.3.2",
-        "eslint-module-utils": "2.2.0",
-        "has": "1.0.3",
-        "lodash": "4.17.11",
-        "minimatch": "3.0.4",
-        "read-pkg-up": "2.0.0",
-        "resolve": "1.8.1"
+        "eslint-import-resolver-node": "^0.3.1",
+        "eslint-module-utils": "^2.2.0",
+        "has": "^1.0.1",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.3",
+        "read-pkg-up": "^2.0.0",
+        "resolve": "^1.6.0"
       },
       "dependencies": {
         "debug": {
@@ -6283,8 +5817,8 @@
           "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
           "dev": true,
           "requires": {
-            "esutils": "2.0.2",
-            "isarray": "1.0.0"
+            "esutils": "^2.0.2",
+            "isarray": "^1.0.0"
           }
         },
         "ms": {
@@ -6307,14 +5841,14 @@
       "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==",
       "dev": true,
       "requires": {
-        "aria-query": "3.0.0",
-        "array-includes": "3.0.3",
-        "ast-types-flow": "0.0.7",
-        "axobject-query": "2.0.2",
-        "damerau-levenshtein": "1.0.4",
-        "emoji-regex": "6.5.1",
-        "has": "1.0.3",
-        "jsx-ast-utils": "2.0.1"
+        "aria-query": "^3.0.0",
+        "array-includes": "^3.0.3",
+        "ast-types-flow": "^0.0.7",
+        "axobject-query": "^2.0.1",
+        "damerau-levenshtein": "^1.0.4",
+        "emoji-regex": "^6.5.1",
+        "has": "^1.0.3",
+        "jsx-ast-utils": "^2.0.1"
       }
     },
     "eslint-plugin-react": {
@@ -6323,11 +5857,11 @@
       "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==",
       "dev": true,
       "requires": {
-        "array-includes": "3.0.3",
-        "doctrine": "2.1.0",
-        "has": "1.0.3",
-        "jsx-ast-utils": "2.0.1",
-        "prop-types": "15.6.2"
+        "array-includes": "^3.0.3",
+        "doctrine": "^2.1.0",
+        "has": "^1.0.3",
+        "jsx-ast-utils": "^2.0.1",
+        "prop-types": "^15.6.2"
       }
     },
     "eslint-restricted-globals": {
@@ -6342,8 +5876,8 @@
       "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
       "dev": true,
       "requires": {
-        "esrecurse": "4.2.1",
-        "estraverse": "4.2.0"
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
       }
     },
     "eslint-visitor-keys": {
@@ -6354,26 +5888,21 @@
     },
     "espree": {
       "version": "3.5.4",
-      "resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
       "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
       "dev": true,
       "requires": {
-        "acorn": "5.7.3",
-        "acorn-jsx": "3.0.1"
+        "acorn": "^5.5.0",
+        "acorn-jsx": "^3.0.0"
       }
     },
-    "esprima-fb": {
-      "version": "15001.1.0-dev-harmony-fb",
-      "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz",
-      "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE="
-    },
     "esquery": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
       "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
       "dev": true,
       "requires": {
-        "estraverse": "4.2.0"
+        "estraverse": "^4.0.0"
       }
     },
     "esrecurse": {
@@ -6382,7 +5911,7 @@
       "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
       "dev": true,
       "requires": {
-        "estraverse": "4.2.0"
+        "estraverse": "^4.1.0"
       }
     },
     "estraverse": {
@@ -6414,8 +5943,8 @@
       "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
       "dev": true,
       "requires": {
-        "md5.js": "1.3.5",
-        "safe-buffer": "5.1.2"
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
       }
     },
     "exec-sh": {
@@ -6424,7 +5953,7 @@
       "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==",
       "dev": true,
       "requires": {
-        "merge": "1.2.0"
+        "merge": "^1.2.0"
       }
     },
     "execa": {
@@ -6433,13 +5962,13 @@
       "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
       "dev": true,
       "requires": {
-        "cross-spawn": "5.1.0",
-        "get-stream": "3.0.0",
-        "is-stream": "1.1.0",
-        "npm-run-path": "2.0.2",
-        "p-finally": "1.0.0",
-        "signal-exit": "3.0.2",
-        "strip-eof": "1.0.0"
+        "cross-spawn": "^5.0.1",
+        "get-stream": "^3.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
       }
     },
     "execall": {
@@ -6448,7 +5977,7 @@
       "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=",
       "dev": true,
       "requires": {
-        "clone-regexp": "1.0.1"
+        "clone-regexp": "^1.0.0"
       }
     },
     "exenv": {
@@ -6468,7 +5997,7 @@
       "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
       "dev": true,
       "requires": {
-        "is-posix-bracket": "0.1.1"
+        "is-posix-bracket": "^0.1.0"
       }
     },
     "expand-range": {
@@ -6477,7 +6006,7 @@
       "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
       "dev": true,
       "requires": {
-        "fill-range": "2.2.4"
+        "fill-range": "^2.1.0"
       }
     },
     "expect": {
@@ -6486,12 +6015,12 @@
       "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==",
       "dev": true,
       "requires": {
-        "ansi-styles": "3.2.1",
-        "jest-diff": "23.6.0",
-        "jest-get-type": "22.4.3",
-        "jest-matcher-utils": "23.6.0",
-        "jest-message-util": "23.4.0",
-        "jest-regex-util": "23.3.0"
+        "ansi-styles": "^3.2.0",
+        "jest-diff": "^23.6.0",
+        "jest-get-type": "^22.1.0",
+        "jest-matcher-utils": "^23.6.0",
+        "jest-message-util": "^23.4.0",
+        "jest-regex-util": "^23.3.0"
       }
     },
     "expect-ct": {
@@ -6504,36 +6033,36 @@
       "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
       "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
       "requires": {
-        "accepts": "1.3.5",
+        "accepts": "~1.3.5",
         "array-flatten": "1.1.1",
         "body-parser": "1.18.3",
         "content-disposition": "0.5.2",
-        "content-type": "1.0.4",
+        "content-type": "~1.0.4",
         "cookie": "0.3.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
-        "depd": "1.1.2",
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "etag": "1.8.1",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
         "finalhandler": "1.1.1",
         "fresh": "0.5.2",
         "merge-descriptors": "1.0.1",
-        "methods": "1.1.2",
-        "on-finished": "2.3.0",
-        "parseurl": "1.3.2",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
         "path-to-regexp": "0.1.7",
-        "proxy-addr": "2.0.4",
+        "proxy-addr": "~2.0.4",
         "qs": "6.5.2",
-        "range-parser": "1.2.0",
+        "range-parser": "~1.2.0",
         "safe-buffer": "5.1.2",
         "send": "0.16.2",
         "serve-static": "1.13.2",
         "setprototypeof": "1.1.0",
-        "statuses": "1.4.0",
-        "type-is": "1.6.16",
+        "statuses": "~1.4.0",
+        "type-is": "~1.6.16",
         "utils-merge": "1.0.1",
-        "vary": "1.1.2"
+        "vary": "~1.1.2"
       },
       "dependencies": {
         "debug": {
@@ -6564,7 +6093,8 @@
     "extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
     },
     "extend-shallow": {
       "version": "3.0.2",
@@ -6572,8 +6102,8 @@
       "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
       "dev": true,
       "requires": {
-        "assign-symbols": "1.0.0",
-        "is-extendable": "1.0.1"
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
       },
       "dependencies": {
         "is-extendable": {
@@ -6582,20 +6112,20 @@
           "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
           "dev": true,
           "requires": {
-            "is-plain-object": "2.0.4"
+            "is-plain-object": "^2.0.4"
           }
         }
       }
     },
     "external-editor": {
       "version": "2.2.0",
-      "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
       "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
       "dev": true,
       "requires": {
-        "chardet": "0.4.2",
-        "iconv-lite": "0.4.24",
-        "tmp": "0.0.33"
+        "chardet": "^0.4.0",
+        "iconv-lite": "^0.4.17",
+        "tmp": "^0.0.33"
       }
     },
     "extglob": {
@@ -6604,7 +6134,7 @@
       "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
       "dev": true,
       "requires": {
-        "is-extglob": "1.0.0"
+        "is-extglob": "^1.0.0"
       }
     },
     "extsprintf": {
@@ -6616,7 +6146,8 @@
     "fast-deep-equal": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
-      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+      "dev": true
     },
     "fast-glob": {
       "version": "2.2.3",
@@ -6624,12 +6155,12 @@
       "integrity": "sha512-NiX+JXjnx43RzvVFwRWfPKo4U+1BrK5pJPsHQdKMlLoFHrrGktXglQhHliSihWAq+m1z6fHk3uwGHrtRbS9vLA==",
       "dev": true,
       "requires": {
-        "@mrmlnc/readdir-enhanced": "2.2.1",
-        "@nodelib/fs.stat": "1.1.2",
-        "glob-parent": "3.1.0",
-        "is-glob": "4.0.0",
-        "merge2": "1.2.3",
-        "micromatch": "3.1.10"
+        "@mrmlnc/readdir-enhanced": "^2.2.1",
+        "@nodelib/fs.stat": "^1.0.1",
+        "glob-parent": "^3.1.0",
+        "is-glob": "^4.0.0",
+        "merge2": "^1.2.1",
+        "micromatch": "^3.1.10"
       },
       "dependencies": {
         "arr-diff": {
@@ -6650,16 +6181,16 @@
           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
           "dev": true,
           "requires": {
-            "arr-flatten": "1.1.0",
-            "array-unique": "0.3.2",
-            "extend-shallow": "2.0.1",
-            "fill-range": "4.0.0",
-            "isobject": "3.0.1",
-            "repeat-element": "1.1.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "extend-shallow": {
@@ -6668,7 +6199,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -6688,13 +6219,13 @@
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -6703,7 +6234,7 @@
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
@@ -6712,7 +6243,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
@@ -6721,7 +6252,7 @@
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -6730,7 +6261,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -6741,7 +6272,7 @@
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -6750,7 +6281,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -6761,9 +6292,9 @@
               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
@@ -6780,14 +6311,14 @@
           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
           "dev": true,
           "requires": {
-            "array-unique": "0.3.2",
-            "define-property": "1.0.0",
-            "expand-brackets": "2.1.4",
-            "extend-shallow": "2.0.1",
-            "fragment-cache": "0.2.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -6796,7 +6327,7 @@
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
@@ -6805,7 +6336,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -6816,10 +6347,10 @@
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
@@ -6828,7 +6359,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -6839,8 +6370,8 @@
           "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
           "dev": true,
           "requires": {
-            "is-glob": "3.1.0",
-            "path-dirname": "1.0.2"
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
           },
           "dependencies": {
             "is-glob": {
@@ -6849,7 +6380,7 @@
               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
               "dev": true,
               "requires": {
-                "is-extglob": "2.1.1"
+                "is-extglob": "^2.1.0"
               }
             }
           }
@@ -6860,7 +6391,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -6869,7 +6400,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -6878,9 +6409,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-extglob": {
@@ -6895,7 +6426,7 @@
           "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
           "dev": true,
           "requires": {
-            "is-extglob": "2.1.1"
+            "is-extglob": "^2.1.1"
           }
         },
         "is-number": {
@@ -6904,7 +6435,7 @@
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
@@ -6913,7 +6444,7 @@
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
@@ -6936,19 +6467,19 @@
           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "define-property": "2.0.2",
-            "extend-shallow": "3.0.2",
-            "extglob": "2.0.4",
-            "fragment-cache": "0.2.1",
-            "kind-of": "6.0.2",
-            "nanomatch": "1.2.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         },
         "ms": {
@@ -6962,7 +6493,8 @@
     "fast-json-stable-stringify": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+      "dev": true
     },
     "fast-levenshtein": {
       "version": "2.0.6",
@@ -6982,31 +6514,7 @@
       "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
       "dev": true,
       "requires": {
-        "bser": "2.0.0"
-      }
-    },
-    "fbjs": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz",
-      "integrity": "sha1-lja3cF9bqWhNRLcveDISVK/IYPc=",
-      "requires": {
-        "core-js": "1.2.7",
-        "loose-envify": "1.4.0",
-        "promise": "7.3.1",
-        "ua-parser-js": "0.7.19",
-        "whatwg-fetch": "0.9.0"
-      },
-      "dependencies": {
-        "core-js": {
-          "version": "1.2.7",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
-          "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
-        },
-        "whatwg-fetch": {
-          "version": "0.9.0",
-          "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz",
-          "integrity": "sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA="
-        }
+        "bser": "^2.0.0"
       }
     },
     "feature-policy": {
@@ -7020,7 +6528,7 @@
       "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
       "dev": true,
       "requires": {
-        "escape-string-regexp": "1.0.5"
+        "escape-string-regexp": "^1.0.5"
       }
     },
     "file-entry-cache": {
@@ -7029,18 +6537,18 @@
       "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
       "dev": true,
       "requires": {
-        "flat-cache": "1.3.0",
-        "object-assign": "4.1.1"
+        "flat-cache": "^1.2.1",
+        "object-assign": "^4.0.1"
       }
     },
     "file-loader": {
       "version": "1.1.11",
-      "resolved": "http://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
+      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
       "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "schema-utils": "0.4.7"
+        "loader-utils": "^1.0.2",
+        "schema-utils": "^0.4.5"
       }
     },
     "file-set": {
@@ -7049,8 +6557,8 @@
       "integrity": "sha512-XgOUUpgR6FbbfYcniLw0qm1Am7PnNYIAkd+eXxRt42LiYhjaso0WiuQ+VmrNdtwotyM+cLCfZ56AZrySP3QnKA==",
       "dev": true,
       "requires": {
-        "array-back": "2.0.0",
-        "glob": "7.1.3"
+        "array-back": "^2.0.0",
+        "glob": "^7.1.3"
       },
       "dependencies": {
         "glob": {
@@ -7059,21 +6567,16 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
     },
-    "file-type": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
-      "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ=="
-    },
     "filename-regex": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
@@ -7086,8 +6589,8 @@
       "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
       "dev": true,
       "requires": {
-        "glob": "7.1.3",
-        "minimatch": "3.0.4"
+        "glob": "^7.0.3",
+        "minimatch": "^3.0.3"
       },
       "dependencies": {
         "glob": {
@@ -7096,70 +6599,27 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
-          }
-        }
-      }
-    },
-    "filestack-js": {
-      "version": "1.14.6",
-      "resolved": "https://registry.npmjs.org/filestack-js/-/filestack-js-1.14.6.tgz",
-      "integrity": "sha512-mcME182eOUy3OyU0F9rcATQf3/YY3N1suXYVv3hcS1RxeVHIIkM9XI6N9Qg5t04y0qOGud9xv/GO+oKhreCSIw==",
-      "requires": {
-        "abab": "2.0.0",
-        "ajv": "6.10.0",
-        "file-type": "8.1.0",
-        "filestack-loader": "3.0.4",
-        "is-svg": "3.0.0",
-        "isutf8": "2.0.3",
-        "spark-md5": "3.0.0",
-        "superagent": "3.8.3",
-        "tcomb-validation": "3.4.1",
-        "tslib": "1.9.3"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.10.0",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
-          "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
-          "requires": {
-            "fast-deep-equal": "2.0.1",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.4.1",
-            "uri-js": "4.2.2"
-          }
-        },
-        "is-svg": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
-          "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
-          "requires": {
-            "html-comment-regex": "1.1.2"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
     },
-    "filestack-loader": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/filestack-loader/-/filestack-loader-3.0.4.tgz",
-      "integrity": "sha512-b6uOCWHd1gM0+5KBA1rA4qfEgTqyTr5umLM4bBWT4z98WUwxa6KzCiq+z0VnR4rN+NCx6kyZ/wLXjGcPU32TxQ=="
-    },
     "fill-range": {
       "version": "2.2.4",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
       "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
       "dev": true,
       "requires": {
-        "is-number": "2.1.0",
-        "isobject": "2.1.0",
-        "randomatic": "3.1.1",
-        "repeat-element": "1.1.3",
-        "repeat-string": "1.6.1"
+        "is-number": "^2.1.0",
+        "isobject": "^2.0.0",
+        "randomatic": "^3.0.0",
+        "repeat-element": "^1.1.2",
+        "repeat-string": "^1.5.2"
       }
     },
     "finalhandler": {
@@ -7168,12 +6628,12 @@
       "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
       "requires": {
         "debug": "2.6.9",
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "on-finished": "2.3.0",
-        "parseurl": "1.3.2",
-        "statuses": "1.4.0",
-        "unpipe": "1.0.0"
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "statuses": "~1.4.0",
+        "unpipe": "~1.0.0"
       },
       "dependencies": {
         "debug": {
@@ -7202,13 +6662,13 @@
       "integrity": "sha1-rMAQQ6Z0n+w0Qpvmtk9ULrtdY1U=",
       "dev": true,
       "requires": {
-        "json5": "0.5.1",
-        "path-exists": "3.0.0"
+        "json5": "^0.5.1",
+        "path-exists": "^3.0.0"
       },
       "dependencies": {
         "json5": {
           "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
         }
@@ -7220,9 +6680,9 @@
       "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
       "dev": true,
       "requires": {
-        "commondir": "1.0.1",
-        "make-dir": "1.3.0",
-        "pkg-dir": "2.0.0"
+        "commondir": "^1.0.1",
+        "make-dir": "^1.0.0",
+        "pkg-dir": "^2.0.0"
       }
     },
     "find-replace": {
@@ -7230,8 +6690,8 @@
       "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
       "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
       "requires": {
-        "array-back": "2.0.0",
-        "test-value": "3.0.0"
+        "array-back": "^2.0.0",
+        "test-value": "^3.0.0"
       }
     },
     "find-up": {
@@ -7240,7 +6700,7 @@
       "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
       "dev": true,
       "requires": {
-        "locate-path": "2.0.0"
+        "locate-path": "^2.0.0"
       }
     },
     "flat-cache": {
@@ -7249,10 +6709,10 @@
       "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
       "dev": true,
       "requires": {
-        "circular-json": "0.3.3",
-        "del": "2.2.2",
-        "graceful-fs": "4.1.11",
-        "write": "0.2.1"
+        "circular-json": "^0.3.1",
+        "del": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "write": "^0.2.1"
       }
     },
     "flatten": {
@@ -7267,8 +6727,8 @@
       "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "readable-stream": "2.0.6"
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.4"
       }
     },
     "flux-standard-action": {
@@ -7276,31 +6736,7 @@
       "resolved": "https://registry.npmjs.org/flux-standard-action/-/flux-standard-action-2.0.3.tgz",
       "integrity": "sha512-HR2IjMkqJreoFm1Hx7hmMAtUFeo+ad8hPMYPo8o3YSWjbSq0sMwuXMbv4giB3TXngYB7+svkAJewQwwvwsE6xw==",
       "requires": {
-        "lodash": "4.17.11"
-      }
-    },
-    "follow-redirects": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-0.0.7.tgz",
-      "integrity": "sha1-NLkLqyqRGqNHVx2pDyK9NuzYqRk=",
-      "requires": {
-        "debug": "2.6.9",
-        "stream-consume": "0.1.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-        }
+        "lodash": "^4.0.0"
       }
     },
     "for-in": {
@@ -7315,7 +6751,7 @@
       "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
       "dev": true,
       "requires": {
-        "for-in": "1.0.2"
+        "for-in": "^1.0.1"
       }
     },
     "forever-agent": {
@@ -7328,36 +6764,11 @@
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
       "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+      "dev": true,
       "requires": {
-        "asynckit": "0.4.0",
-        "combined-stream": "1.0.7",
-        "mime-types": "2.1.21"
-      }
-    },
-    "form-data-to-object": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/form-data-to-object/-/form-data-to-object-0.2.0.tgz",
-      "integrity": "sha1-96jmjd2RChEApl4lrGpIQUP/gWg="
-    },
-    "formatio": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz",
-      "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=",
-      "requires": {
-        "samsam": "1.1.2"
-      }
-    },
-    "formidable": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz",
-      "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="
-    },
-    "formsy-react": {
-      "version": "0.19.5",
-      "resolved": "https://registry.npmjs.org/formsy-react/-/formsy-react-0.19.5.tgz",
-      "integrity": "sha1-dgpXrAETRC499MMJw2ON2SlX544=",
-      "requires": {
-        "form-data-to-object": "0.2.0"
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
       }
     },
     "forwarded": {
@@ -7371,7 +6782,7 @@
       "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
       "dev": true,
       "requires": {
-        "map-cache": "0.2.2"
+        "map-cache": "^0.2.2"
       }
     },
     "frameguard": {
@@ -7390,8 +6801,18 @@
       "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "readable-stream": "2.0.6"
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-minipass": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz",
+      "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "minipass": "^2.2.1"
       }
     },
     "fs-readdir-recursive": {
@@ -7412,10 +6833,10 @@
       "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "iferr": "0.1.5",
-        "imurmurhash": "0.1.4",
-        "readable-stream": "2.0.6"
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
       }
     },
     "fs.realpath": {
@@ -7428,527 +6849,307 @@
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
       "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+      "dev": true,
       "optional": true,
       "requires": {
-        "nan": "2.11.1",
-        "node-pre-gyp": "0.10.0"
+        "nan": "^2.9.2",
+        "node-pre-gyp": "^0.10.0"
       },
       "dependencies": {
         "abbrev": {
           "version": "1.1.1",
-          "resolved": false,
-          "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+          "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
         },
         "ansi-regex": {
           "version": "2.1.1",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
           "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
         },
         "aproba": {
           "version": "1.2.0",
-          "resolved": false,
-          "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
-          "optional": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.4",
-          "resolved": false,
-          "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
-          "optional": true,
-          "requires": {
-            "delegates": "1.0.0",
-            "readable-stream": "2.3.6"
-          }
+          "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+          "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
         },
         "balanced-match": {
           "version": "1.0.0",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
           "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
         },
         "brace-expansion": {
           "version": "1.1.11",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
           "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
           "requires": {
-            "balanced-match": "1.0.0",
+            "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
           }
         },
-        "chownr": {
-          "version": "1.0.1",
-          "resolved": false,
-          "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
-          "optional": true
-        },
         "code-point-at": {
           "version": "1.1.0",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
           "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
         },
         "concat-map": {
           "version": "0.0.1",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
           "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
         },
         "console-control-strings": {
           "version": "1.1.0",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
           "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
         },
         "core-util-is": {
           "version": "1.0.2",
-          "resolved": false,
-          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-          "optional": true
-        },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": false,
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "optional": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "deep-extend": {
-          "version": "0.5.1",
-          "resolved": false,
-          "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+          "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
         },
         "delegates": {
           "version": "1.0.0",
-          "resolved": false,
-          "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+          "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
         },
         "detect-libc": {
           "version": "1.0.3",
-          "resolved": false,
-          "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+          "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
         },
         "fs-minipass": {
           "version": "1.2.5",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
           "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
-          "optional": true,
           "requires": {
-            "minipass": "2.2.4"
+            "minipass": "^2.2.1"
           }
         },
         "fs.realpath": {
           "version": "1.0.0",
-          "resolved": false,
-          "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+          "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
         },
         "gauge": {
           "version": "2.7.4",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
           "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
-          "optional": true,
-          "requires": {
-            "aproba": "1.2.0",
-            "console-control-strings": "1.1.0",
-            "has-unicode": "2.0.1",
-            "object-assign": "4.1.1",
-            "signal-exit": "3.0.2",
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wide-align": "1.1.2"
-          }
-        },
-        "glob": {
-          "version": "7.1.2",
-          "resolved": false,
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "optional": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
           }
         },
         "has-unicode": {
           "version": "2.0.1",
-          "resolved": false,
-          "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
-          "optional": true
-        },
-        "iconv-lite": {
-          "version": "0.4.21",
-          "resolved": false,
-          "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==",
-          "optional": true,
-          "requires": {
-            "safer-buffer": "2.1.2"
-          }
+          "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+          "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
         },
         "ignore-walk": {
           "version": "3.0.1",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
           "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
-          "optional": true,
           "requires": {
-            "minimatch": "3.0.4"
+            "minimatch": "^3.0.4"
           }
         },
         "inflight": {
           "version": "1.0.6",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
           "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-          "optional": true,
           "requires": {
-            "once": "1.4.0",
-            "wrappy": "1.0.2"
+            "once": "^1.3.0",
+            "wrappy": "1"
           }
         },
         "inherits": {
           "version": "2.0.3",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
           "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
         },
         "ini": {
           "version": "1.3.5",
-          "resolved": false,
-          "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+          "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
         },
         "is-fullwidth-code-point": {
           "version": "1.0.0",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "isarray": {
           "version": "1.0.0",
-          "resolved": false,
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
         },
         "minimatch": {
           "version": "3.0.4",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
           "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
           "requires": {
-            "brace-expansion": "1.1.11"
+            "brace-expansion": "^1.1.7"
           }
         },
         "minimist": {
           "version": "0.0.8",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
           "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
         },
-        "minipass": {
-          "version": "2.2.4",
-          "resolved": false,
-          "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==",
-          "requires": {
-            "safe-buffer": "5.1.1",
-            "yallist": "3.0.2"
-          }
-        },
-        "minizlib": {
-          "version": "1.1.0",
-          "resolved": false,
-          "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
-          "optional": true,
-          "requires": {
-            "minipass": "2.2.4"
-          }
-        },
         "mkdirp": {
           "version": "0.5.1",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
           "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
           "requires": {
             "minimist": "0.0.8"
           }
         },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": false,
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "optional": true
-        },
-        "needle": {
-          "version": "2.2.0",
-          "resolved": false,
-          "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==",
-          "optional": true,
-          "requires": {
-            "debug": "2.6.9",
-            "iconv-lite": "0.4.21",
-            "sax": "1.2.4"
-          }
-        },
-        "node-pre-gyp": {
-          "version": "0.10.0",
-          "resolved": false,
-          "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==",
-          "optional": true,
-          "requires": {
-            "detect-libc": "1.0.3",
-            "mkdirp": "0.5.1",
-            "needle": "2.2.0",
-            "nopt": "4.0.1",
-            "npm-packlist": "1.1.10",
-            "npmlog": "4.1.2",
-            "rc": "1.2.7",
-            "rimraf": "2.6.2",
-            "semver": "5.5.0",
-            "tar": "4.4.1"
-          }
-        },
         "nopt": {
           "version": "4.0.1",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
           "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
-          "optional": true,
           "requires": {
-            "abbrev": "1.1.1",
-            "osenv": "0.1.5"
-          }
-        },
-        "npm-bundled": {
-          "version": "1.0.3",
-          "resolved": false,
-          "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==",
-          "optional": true
-        },
-        "npm-packlist": {
-          "version": "1.1.10",
-          "resolved": false,
-          "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
-          "optional": true,
-          "requires": {
-            "ignore-walk": "3.0.1",
-            "npm-bundled": "1.0.3"
+            "abbrev": "1",
+            "osenv": "^0.1.4"
           }
         },
         "npmlog": {
           "version": "4.1.2",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
           "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
-          "optional": true,
           "requires": {
-            "are-we-there-yet": "1.1.4",
-            "console-control-strings": "1.1.0",
-            "gauge": "2.7.4",
-            "set-blocking": "2.0.0"
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
           }
         },
         "number-is-nan": {
           "version": "1.0.1",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
           "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
         },
         "object-assign": {
           "version": "4.1.1",
-          "resolved": false,
-          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
         },
         "once": {
           "version": "1.4.0",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
           "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
           "requires": {
-            "wrappy": "1.0.2"
+            "wrappy": "1"
           }
         },
         "os-homedir": {
           "version": "1.0.2",
-          "resolved": false,
-          "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+          "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
         },
         "os-tmpdir": {
           "version": "1.0.2",
-          "resolved": false,
-          "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+          "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
         },
         "osenv": {
           "version": "0.1.5",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
           "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-          "optional": true,
           "requires": {
-            "os-homedir": "1.0.2",
-            "os-tmpdir": "1.0.2"
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
           }
         },
         "path-is-absolute": {
           "version": "1.0.1",
-          "resolved": false,
-          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+          "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
         },
         "process-nextick-args": {
           "version": "2.0.0",
-          "resolved": false,
-          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
-          "optional": true
-        },
-        "rc": {
-          "version": "1.2.7",
-          "resolved": false,
-          "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
-          "optional": true,
-          "requires": {
-            "deep-extend": "0.5.1",
-            "ini": "1.3.5",
-            "minimist": "1.2.0",
-            "strip-json-comments": "2.0.1"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "1.2.0",
-              "resolved": false,
-              "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-              "optional": true
-            }
-          }
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
         },
         "readable-stream": {
           "version": "2.3.6",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
           "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "optional": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.2",
-          "resolved": false,
-          "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
-          "optional": true,
-          "requires": {
-            "glob": "7.1.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
-        "safe-buffer": {
-          "version": "5.1.1",
-          "resolved": false,
-          "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
-        },
         "safer-buffer": {
           "version": "2.1.2",
-          "resolved": false,
-          "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+          "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
         },
         "sax": {
           "version": "1.2.4",
-          "resolved": false,
-          "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
-          "optional": true
-        },
-        "semver": {
-          "version": "5.5.0",
-          "resolved": false,
-          "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+          "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
         },
         "set-blocking": {
           "version": "2.0.0",
-          "resolved": false,
-          "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+          "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
         },
         "signal-exit": {
           "version": "3.0.2",
-          "resolved": false,
-          "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
-          "optional": true
+          "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+          "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
         },
         "string-width": {
           "version": "1.0.2",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "string_decoder": {
           "version": "1.1.1",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "optional": true,
           "requires": {
-            "safe-buffer": "5.1.1"
+            "safe-buffer": "~5.1.0"
           }
         },
         "strip-ansi": {
           "version": "3.0.1",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "strip-json-comments": {
           "version": "2.0.1",
-          "resolved": false,
-          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
-          "optional": true
-        },
-        "tar": {
-          "version": "4.4.1",
-          "resolved": false,
-          "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==",
-          "optional": true,
-          "requires": {
-            "chownr": "1.0.1",
-            "fs-minipass": "1.2.5",
-            "minipass": "2.2.4",
-            "minizlib": "1.1.0",
-            "mkdirp": "0.5.1",
-            "safe-buffer": "5.1.1",
-            "yallist": "3.0.2"
-          }
+          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+          "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
         },
         "util-deprecate": {
           "version": "1.0.2",
-          "resolved": false,
-          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
-          "optional": true
-        },
-        "wide-align": {
-          "version": "1.1.2",
-          "resolved": false,
-          "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
-          "optional": true,
-          "requires": {
-            "string-width": "1.0.2"
-          }
+          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+          "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
         },
         "wrappy": {
           "version": "1.0.2",
-          "resolved": false,
+          "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
           "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-        },
-        "yallist": {
-          "version": "3.0.2",
-          "resolved": false,
-          "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
         }
       }
     },
@@ -7958,10 +7159,10 @@
       "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "inherits": "2.0.3",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2"
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
       }
     },
     "function-bind": {
@@ -7982,14 +7183,14 @@
       "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0",
-        "console-control-strings": "1.1.0",
-        "has-unicode": "2.0.1",
-        "object-assign": "4.1.1",
-        "signal-exit": "3.0.2",
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1",
-        "wide-align": "1.1.3"
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
       },
       "dependencies": {
         "is-fullwidth-code-point": {
@@ -7998,7 +7199,7 @@
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "dev": true,
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "string-width": {
@@ -8007,9 +7208,9 @@
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "dev": true,
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         }
       }
@@ -8020,7 +7221,7 @@
       "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
       "dev": true,
       "requires": {
-        "globule": "1.2.1"
+        "globule": "^1.0.0"
       }
     },
     "generic-names": {
@@ -8029,12 +7230,12 @@
       "integrity": "sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=",
       "dev": true,
       "requires": {
-        "loader-utils": "0.2.17"
+        "loader-utils": "^0.2.16"
       },
       "dependencies": {
         "json5": {
           "version": "0.5.1",
-          "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
           "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
           "dev": true
         },
@@ -8044,10 +7245,10 @@
           "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
           "dev": true,
           "requires": {
-            "big.js": "3.2.0",
-            "emojis-list": "2.1.0",
-            "json5": "0.5.1",
-            "object-assign": "4.1.1"
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
           }
         }
       }
@@ -8066,7 +7267,7 @@
     },
     "get-stream": {
       "version": "3.0.0",
-      "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
       "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
       "dev": true
     },
@@ -8082,19 +7283,7 @@
       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
       "dev": true,
       "requires": {
-        "assert-plus": "1.0.0"
-      }
-    },
-    "glob": {
-      "version": "5.0.15",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-      "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
-      "requires": {
-        "inflight": "1.0.6",
-        "inherits": "2.0.3",
-        "minimatch": "3.0.4",
-        "once": "1.4.0",
-        "path-is-absolute": "1.0.1"
+        "assert-plus": "^1.0.0"
       }
     },
     "glob-base": {
@@ -8103,8 +7292,8 @@
       "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
       "dev": true,
       "requires": {
-        "glob-parent": "2.0.0",
-        "is-glob": "2.0.1"
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
       }
     },
     "glob-parent": {
@@ -8113,7 +7302,7 @@
       "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
       "dev": true,
       "requires": {
-        "is-glob": "2.0.1"
+        "is-glob": "^2.0.0"
       }
     },
     "glob-to-regexp": {
@@ -8128,8 +7317,8 @@
       "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
       "dev": true,
       "requires": {
-        "min-document": "2.19.0",
-        "process": "0.5.2"
+        "min-document": "^2.19.0",
+        "process": "~0.5.1"
       }
     },
     "global-modules-path": {
@@ -8150,12 +7339,12 @@
       "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
       "dev": true,
       "requires": {
-        "array-union": "1.0.2",
-        "arrify": "1.0.1",
-        "glob": "7.1.3",
-        "object-assign": "4.1.1",
-        "pify": "2.3.0",
-        "pinkie-promise": "2.0.1"
+        "array-union": "^1.0.1",
+        "arrify": "^1.0.0",
+        "glob": "^7.0.3",
+        "object-assign": "^4.0.1",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
       },
       "dependencies": {
         "glob": {
@@ -8164,12 +7353,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "pify": {
@@ -8192,9 +7381,9 @@
       "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
       "dev": true,
       "requires": {
-        "glob": "7.1.3",
-        "lodash": "4.17.11",
-        "minimatch": "3.0.4"
+        "glob": "~7.1.1",
+        "lodash": "~4.17.10",
+        "minimatch": "~3.0.2"
       },
       "dependencies": {
         "glob": {
@@ -8203,12 +7392,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
@@ -8219,12 +7408,12 @@
       "integrity": "sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw==",
       "dev": true,
       "requires": {
-        "minimist": "1.1.3"
+        "minimist": "1.1.x"
       },
       "dependencies": {
         "minimist": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
           "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=",
           "dev": true
         }
@@ -8233,12 +7422,8 @@
     "graceful-fs": {
       "version": "4.1.11",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-      "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
-    },
-    "graceful-readlink": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
-      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
+      "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+      "dev": true
     },
     "growly": {
       "version": "1.3.0",
@@ -8252,10 +7437,10 @@
       "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
       "dev": true,
       "requires": {
-        "async": "2.6.1",
-        "optimist": "0.6.1",
-        "source-map": "0.6.1",
-        "uglify-js": "3.4.9"
+        "async": "^2.5.0",
+        "optimist": "^0.6.1",
+        "source-map": "^0.6.1",
+        "uglify-js": "^3.1.4"
       },
       "dependencies": {
         "async": {
@@ -8264,7 +7449,7 @@
           "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
           "dev": true,
           "requires": {
-            "lodash": "4.17.11"
+            "lodash": "^4.17.10"
           }
         },
         "commander": {
@@ -8287,8 +7472,8 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "commander": "2.17.1",
-            "source-map": "0.6.1"
+            "commander": "~2.17.1",
+            "source-map": "~0.6.1"
           }
         }
       }
@@ -8305,8 +7490,8 @@
       "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
       "dev": true,
       "requires": {
-        "ajv": "5.5.2",
-        "har-schema": "2.0.0"
+        "ajv": "^5.3.0",
+        "har-schema": "^2.0.0"
       },
       "dependencies": {
         "ajv": {
@@ -8315,10 +7500,10 @@
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "fast-deep-equal": {
@@ -8347,7 +7532,7 @@
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
       "dev": true,
       "requires": {
-        "function-bind": "1.1.1"
+        "function-bind": "^1.1.1"
       }
     },
     "has-ansi": {
@@ -8356,7 +7541,7 @@
       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
       "dev": true,
       "requires": {
-        "ansi-regex": "2.1.1"
+        "ansi-regex": "^2.0.0"
       }
     },
     "has-flag": {
@@ -8382,9 +7567,9 @@
       "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
       "dev": true,
       "requires": {
-        "get-value": "2.0.6",
-        "has-values": "1.0.0",
-        "isobject": "3.0.1"
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
       },
       "dependencies": {
         "isobject": {
@@ -8401,8 +7586,8 @@
       "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
       "dev": true,
       "requires": {
-        "is-number": "3.0.0",
-        "kind-of": "4.0.0"
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
       },
       "dependencies": {
         "is-number": {
@@ -8411,7 +7596,7 @@
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
@@ -8420,7 +7605,7 @@
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
@@ -8431,7 +7616,7 @@
           "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
           "dev": true,
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         }
       }
@@ -8442,8 +7627,8 @@
       "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "hash.js": {
@@ -8452,15 +7637,10 @@
       "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "minimalistic-assert": "1.0.1"
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
       }
     },
-    "he": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/he/-/he-1.0.0.tgz",
-      "integrity": "sha1-baWyZdfyw7XkgHSRaODhWdBXKNo="
-    },
     "helmet": {
       "version": "3.14.0",
       "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.14.0.tgz",
@@ -8503,26 +7683,15 @@
       "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz",
       "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys="
     },
-    "history": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npmjs.org/history/-/history-1.17.0.tgz",
-      "integrity": "sha1-xUg8qlodH+oAoafY0ZuHQBZxHSk=",
-      "requires": {
-        "deep-equal": "1.0.1",
-        "invariant": "2.2.4",
-        "query-string": "3.0.3",
-        "warning": "2.1.0"
-      }
-    },
     "hmac-drbg": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
       "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
       "dev": true,
       "requires": {
-        "hash.js": "1.1.5",
-        "minimalistic-assert": "1.0.1",
-        "minimalistic-crypto-utils": "1.0.1"
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
       }
     },
     "hoist-non-react-statics": {
@@ -8536,8 +7705,8 @@
       "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
       "dev": true,
       "requires": {
-        "os-homedir": "1.0.2",
-        "os-tmpdir": "1.0.2"
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.1"
       }
     },
     "hosted-git-info": {
@@ -8559,7 +7728,8 @@
     "html-comment-regex": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
-      "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="
+      "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
+      "dev": true
     },
     "html-encoding-sniffer": {
       "version": "1.0.2",
@@ -8567,7 +7737,7 @@
       "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
       "dev": true,
       "requires": {
-        "whatwg-encoding": "1.0.5"
+        "whatwg-encoding": "^1.0.1"
       }
     },
     "html-entities": {
@@ -8576,57 +7746,24 @@
       "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
       "dev": true
     },
-    "html-minifier": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-1.5.0.tgz",
-      "integrity": "sha1-vrBf2cw0CUWGXBD0Cu30aa9LFTQ=",
-      "requires": {
-        "change-case": "2.3.1",
-        "clean-css": "3.4.28",
-        "commander": "2.9.0",
-        "concat-stream": "1.5.2",
-        "he": "1.0.0",
-        "ncname": "1.0.0",
-        "relateurl": "0.2.7",
-        "uglify-js": "2.6.4"
-      }
-    },
     "html-tags": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
       "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
       "dev": true
     },
-    "html-webpack-plugin": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-1.7.0.tgz",
-      "integrity": "sha1-zQxzx5G9DIxFsk4wAb4zSmt0KXs=",
-      "requires": {
-        "bluebird": "3.5.2",
-        "blueimp-tmpl": "2.5.7",
-        "html-minifier": "1.5.0",
-        "lodash": "3.10.1"
-      },
-      "dependencies": {
-        "lodash": {
-          "version": "3.10.1",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
-          "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
-        }
-      }
-    },
     "htmlparser2": {
       "version": "3.10.0",
       "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
       "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
       "dev": true,
       "requires": {
-        "domelementtype": "1.3.0",
-        "domhandler": "2.4.2",
-        "domutils": "1.7.0",
-        "entities": "1.1.2",
-        "inherits": "2.0.3",
-        "readable-stream": "3.0.6"
+        "domelementtype": "^1.3.0",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.0.6"
       },
       "dependencies": {
         "readable-stream": {
@@ -8635,9 +7772,9 @@
           "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==",
           "dev": true,
           "requires": {
-            "inherits": "2.0.3",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
           }
         },
         "string_decoder": {
@@ -8646,7 +7783,7 @@
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         }
       }
@@ -8656,10 +7793,10 @@
       "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
       "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
       "requires": {
-        "depd": "1.1.2",
+        "depd": "~1.1.2",
         "inherits": "2.0.3",
         "setprototypeof": "1.1.0",
-        "statuses": "1.5.0"
+        "statuses": ">= 1.4.0 < 2"
       }
     },
     "http-signature": {
@@ -8668,9 +7805,9 @@
       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
       "dev": true,
       "requires": {
-        "assert-plus": "1.0.0",
-        "jsprim": "1.4.1",
-        "sshpk": "1.15.1"
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
       }
     },
     "https-browserify": {
@@ -8679,17 +7816,12 @@
       "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
       "dev": true
     },
-    "humps": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/humps/-/humps-0.6.0.tgz",
-      "integrity": "sha1-phchA4bwRF0SLOtNlBSho5saHpQ="
-    },
     "iconv-lite": {
       "version": "0.4.24",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
       "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
       "requires": {
-        "safer-buffer": "2.1.2"
+        "safer-buffer": ">= 2.1.2 < 3"
       }
     },
     "icss-replace-symbols": {
@@ -8704,7 +7836,7 @@
       "integrity": "sha1-7nDTroysOMa+XtkehRsn7tNDrQ8=",
       "dev": true,
       "requires": {
-        "postcss": "6.0.23"
+        "postcss": "^6.0.2"
       }
     },
     "identity-obj-proxy": {
@@ -8713,7 +7845,7 @@
       "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=",
       "dev": true,
       "requires": {
-        "harmony-reflect": "1.6.1"
+        "harmony-reflect": "^1.4.6"
       }
     },
     "ieee754": {
@@ -8739,13 +7871,23 @@
       "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
       "dev": true
     },
+    "ignore-walk": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+      "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "minimatch": "^3.0.4"
+      }
+    },
     "import-cwd": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
       "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
       "dev": true,
       "requires": {
-        "import-from": "2.1.0"
+        "import-from": "^2.1.0"
       }
     },
     "import-from": {
@@ -8754,7 +7896,7 @@
       "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
       "dev": true,
       "requires": {
-        "resolve-from": "3.0.0"
+        "resolve-from": "^3.0.0"
       },
       "dependencies": {
         "resolve-from": {
@@ -8777,8 +7919,8 @@
       "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==",
       "dev": true,
       "requires": {
-        "pkg-dir": "2.0.0",
-        "resolve-cwd": "2.0.0"
+        "pkg-dir": "^2.0.0",
+        "resolve-cwd": "^2.0.0"
       }
     },
     "imurmurhash": {
@@ -8799,7 +7941,7 @@
       "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
       "dev": true,
       "requires": {
-        "repeating": "2.0.1"
+        "repeating": "^2.0.0"
       }
     },
     "indexes-of": {
@@ -8818,9 +7960,10 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
       "requires": {
-        "once": "1.4.0",
-        "wrappy": "1.0.2"
+        "once": "^1.3.0",
+        "wrappy": "1"
       }
     },
     "inherits": {
@@ -8828,26 +7971,33 @@
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
       "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
     },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+      "dev": true,
+      "optional": true
+    },
     "inquirer": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
       "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
       "dev": true,
       "requires": {
-        "ansi-escapes": "3.1.0",
-        "chalk": "2.4.1",
-        "cli-cursor": "2.1.0",
-        "cli-width": "2.2.0",
-        "external-editor": "2.2.0",
-        "figures": "2.0.0",
-        "lodash": "4.17.11",
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.0",
+        "cli-cursor": "^2.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^2.0.4",
+        "figures": "^2.0.0",
+        "lodash": "^4.3.0",
         "mute-stream": "0.0.7",
-        "run-async": "2.3.0",
-        "rx-lite": "4.0.8",
-        "rx-lite-aggregates": "4.0.8",
-        "string-width": "2.1.1",
-        "strip-ansi": "4.0.0",
-        "through": "2.3.8"
+        "run-async": "^2.2.0",
+        "rx-lite": "^4.0.8",
+        "rx-lite-aggregates": "^4.0.8",
+        "string-width": "^2.1.0",
+        "strip-ansi": "^4.0.0",
+        "through": "^2.3.6"
       },
       "dependencies": {
         "ansi-regex": {
@@ -8862,7 +8012,7 @@
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "3.0.0"
+            "ansi-regex": "^3.0.0"
           }
         }
       }
@@ -8878,7 +8028,7 @@
       "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
       "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
       "requires": {
-        "loose-envify": "1.4.0"
+        "loose-envify": "^1.0.0"
       }
     },
     "invert-kv": {
@@ -8904,7 +8054,7 @@
       "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       }
     },
     "is-alphabetical": {
@@ -8925,8 +8075,8 @@
       "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==",
       "dev": true,
       "requires": {
-        "is-alphabetical": "1.0.2",
-        "is-decimal": "1.0.2"
+        "is-alphabetical": "^1.0.0",
+        "is-decimal": "^1.0.0"
       }
     },
     "is-arrayish": {
@@ -8941,13 +8091,14 @@
       "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
       "dev": true,
       "requires": {
-        "binary-extensions": "1.12.0"
+        "binary-extensions": "^1.0.0"
       }
     },
     "is-buffer": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
     },
     "is-builtin-module": {
       "version": "1.0.0",
@@ -8955,7 +8106,7 @@
       "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
       "dev": true,
       "requires": {
-        "builtin-modules": "1.1.1"
+        "builtin-modules": "^1.0.0"
       }
     },
     "is-callable": {
@@ -8970,7 +8121,7 @@
       "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
       "dev": true,
       "requires": {
-        "ci-info": "1.6.0"
+        "ci-info": "^1.5.0"
       }
     },
     "is-data-descriptor": {
@@ -8979,7 +8130,7 @@
       "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       }
     },
     "is-date-object": {
@@ -9000,9 +8151,9 @@
       "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
       "dev": true,
       "requires": {
-        "is-accessor-descriptor": "0.1.6",
-        "is-data-descriptor": "0.1.4",
-        "kind-of": "5.1.0"
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
       },
       "dependencies": {
         "kind-of": {
@@ -9031,7 +8182,7 @@
       "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
       "dev": true,
       "requires": {
-        "is-primitive": "2.0.0"
+        "is-primitive": "^2.0.0"
       }
     },
     "is-extendable": {
@@ -9052,14 +8203,13 @@
       "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
       "dev": true,
       "requires": {
-        "number-is-nan": "1.0.1"
+        "number-is-nan": "^1.0.0"
       }
     },
     "is-fullwidth-code-point": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-      "dev": true
+      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
     },
     "is-generator-fn": {
       "version": "1.0.0",
@@ -9073,7 +8223,7 @@
       "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
       "dev": true,
       "requires": {
-        "is-extglob": "1.0.0"
+        "is-extglob": "^1.0.0"
       }
     },
     "is-hexadecimal": {
@@ -9082,26 +8232,18 @@
       "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==",
       "dev": true
     },
-    "is-lower-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz",
-      "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=",
-      "requires": {
-        "lower-case": "1.1.4"
-      }
-    },
     "is-number": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
       "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       }
     },
     "is-obj": {
       "version": "1.0.1",
-      "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
       "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
       "dev": true
     },
@@ -9117,7 +8259,7 @@
       "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
       "dev": true,
       "requires": {
-        "is-path-inside": "1.0.1"
+        "is-path-inside": "^1.0.0"
       }
     },
     "is-path-inside": {
@@ -9126,7 +8268,7 @@
       "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
       "dev": true,
       "requires": {
-        "path-is-inside": "1.0.2"
+        "path-is-inside": "^1.0.1"
       }
     },
     "is-plain-obj": {
@@ -9141,7 +8283,7 @@
       "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
       "dev": true,
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.1"
       },
       "dependencies": {
         "isobject": {
@@ -9175,7 +8317,7 @@
       "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
       "dev": true,
       "requires": {
-        "has": "1.0.3"
+        "has": "^1.0.1"
       }
     },
     "is-regexp": {
@@ -9190,11 +8332,6 @@
       "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
       "dev": true
     },
-    "is-retina": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-retina/-/is-retina-1.0.3.tgz",
-      "integrity": "sha1-10AbKGvqKuN/Ykd1iN5QTQuGR+M="
-    },
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -9212,7 +8349,7 @@
       "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
       "dev": true,
       "requires": {
-        "html-comment-regex": "1.1.2"
+        "html-comment-regex": "^1.1.0"
       }
     },
     "is-symbol": {
@@ -9221,7 +8358,7 @@
       "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
       "dev": true,
       "requires": {
-        "has-symbols": "1.0.0"
+        "has-symbols": "^1.0.0"
       }
     },
     "is-typedarray": {
@@ -9230,14 +8367,6 @@
       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
       "dev": true
     },
-    "is-upper-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz",
-      "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=",
-      "requires": {
-        "upper-case": "1.1.3"
-      }
-    },
     "is-utf8": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
@@ -9292,8 +8421,8 @@
       "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
       "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
       "requires": {
-        "node-fetch": "1.7.3",
-        "whatwg-fetch": "3.0.0"
+        "node-fetch": "^1.0.1",
+        "whatwg-fetch": ">=0.10.0"
       }
     },
     "isstream": {
@@ -9308,17 +8437,17 @@
       "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==",
       "dev": true,
       "requires": {
-        "async": "2.6.1",
-        "fileset": "2.0.3",
-        "istanbul-lib-coverage": "1.2.1",
-        "istanbul-lib-hook": "1.2.2",
-        "istanbul-lib-instrument": "1.10.2",
-        "istanbul-lib-report": "1.1.5",
-        "istanbul-lib-source-maps": "1.2.6",
-        "istanbul-reports": "1.5.1",
-        "js-yaml": "3.7.0",
-        "mkdirp": "0.5.1",
-        "once": "1.4.0"
+        "async": "^2.1.4",
+        "fileset": "^2.0.2",
+        "istanbul-lib-coverage": "^1.2.1",
+        "istanbul-lib-hook": "^1.2.2",
+        "istanbul-lib-instrument": "^1.10.2",
+        "istanbul-lib-report": "^1.1.5",
+        "istanbul-lib-source-maps": "^1.2.6",
+        "istanbul-reports": "^1.5.1",
+        "js-yaml": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "once": "^1.4.0"
       },
       "dependencies": {
         "async": {
@@ -9327,7 +8456,7 @@
           "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
           "dev": true,
           "requires": {
-            "lodash": "4.17.11"
+            "lodash": "^4.17.10"
           }
         }
       }
@@ -9344,7 +8473,7 @@
       "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==",
       "dev": true,
       "requires": {
-        "append-transform": "0.4.0"
+        "append-transform": "^0.4.0"
       }
     },
     "istanbul-lib-instrument": {
@@ -9353,13 +8482,13 @@
       "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==",
       "dev": true,
       "requires": {
-        "babel-generator": "6.26.1",
-        "babel-template": "6.26.0",
-        "babel-traverse": "6.26.0",
-        "babel-types": "6.26.0",
-        "babylon": "6.18.0",
-        "istanbul-lib-coverage": "1.2.1",
-        "semver": "5.6.0"
+        "babel-generator": "^6.18.0",
+        "babel-template": "^6.16.0",
+        "babel-traverse": "^6.18.0",
+        "babel-types": "^6.18.0",
+        "babylon": "^6.18.0",
+        "istanbul-lib-coverage": "^1.2.1",
+        "semver": "^5.3.0"
       },
       "dependencies": {
         "semver": {
@@ -9376,10 +8505,10 @@
       "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==",
       "dev": true,
       "requires": {
-        "istanbul-lib-coverage": "1.2.1",
-        "mkdirp": "0.5.1",
-        "path-parse": "1.0.6",
-        "supports-color": "3.2.3"
+        "istanbul-lib-coverage": "^1.2.1",
+        "mkdirp": "^0.5.1",
+        "path-parse": "^1.0.5",
+        "supports-color": "^3.1.2"
       },
       "dependencies": {
         "has-flag": {
@@ -9394,7 +8523,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -9405,11 +8534,11 @@
       "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==",
       "dev": true,
       "requires": {
-        "debug": "3.2.6",
-        "istanbul-lib-coverage": "1.2.1",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2",
-        "source-map": "0.5.7"
+        "debug": "^3.1.0",
+        "istanbul-lib-coverage": "^1.2.1",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.6.1",
+        "source-map": "^0.5.3"
       },
       "dependencies": {
         "debug": {
@@ -9418,7 +8547,7 @@
           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
           "dev": true,
           "requires": {
-            "ms": "2.1.1"
+            "ms": "^2.1.1"
           }
         },
         "source-map": {
@@ -9435,22 +8564,17 @@
       "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==",
       "dev": true,
       "requires": {
-        "handlebars": "4.0.12"
+        "handlebars": "^4.0.3"
       }
     },
-    "isutf8": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/isutf8/-/isutf8-2.0.3.tgz",
-      "integrity": "sha512-ucppMz9qxhSceRJ8bP5SfdMdXukV718zXVgeSznBXkDGHbIcN5nptCPnosZhsN959eATLCD3751fo8tD86hM2Q=="
-    },
     "jest": {
       "version": "23.6.0",
       "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz",
       "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==",
       "dev": true,
       "requires": {
-        "import-local": "1.0.0",
-        "jest-cli": "23.6.0"
+        "import-local": "^1.0.0",
+        "jest-cli": "^23.6.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -9465,9 +8589,9 @@
           "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
           "dev": true,
           "requires": {
-            "string-width": "2.1.1",
-            "strip-ansi": "4.0.0",
-            "wrap-ansi": "2.1.0"
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.0.0"
           }
         },
         "glob": {
@@ -9476,12 +8600,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "jest-cli": {
@@ -9490,42 +8614,42 @@
           "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==",
           "dev": true,
           "requires": {
-            "ansi-escapes": "3.1.0",
-            "chalk": "2.4.1",
-            "exit": "0.1.2",
-            "glob": "7.1.3",
-            "graceful-fs": "4.1.11",
-            "import-local": "1.0.0",
-            "is-ci": "1.2.1",
-            "istanbul-api": "1.3.7",
-            "istanbul-lib-coverage": "1.2.1",
-            "istanbul-lib-instrument": "1.10.2",
-            "istanbul-lib-source-maps": "1.2.6",
-            "jest-changed-files": "23.4.2",
-            "jest-config": "23.6.0",
-            "jest-environment-jsdom": "23.4.0",
-            "jest-get-type": "22.4.3",
-            "jest-haste-map": "23.6.0",
-            "jest-message-util": "23.4.0",
-            "jest-regex-util": "23.3.0",
-            "jest-resolve-dependencies": "23.6.0",
-            "jest-runner": "23.6.0",
-            "jest-runtime": "23.6.0",
-            "jest-snapshot": "23.6.0",
-            "jest-util": "23.4.0",
-            "jest-validate": "23.6.0",
-            "jest-watcher": "23.4.0",
-            "jest-worker": "23.2.0",
-            "micromatch": "2.3.11",
-            "node-notifier": "5.3.0",
-            "prompts": "0.1.14",
-            "realpath-native": "1.0.2",
-            "rimraf": "2.6.2",
-            "slash": "1.0.0",
-            "string-length": "2.0.0",
-            "strip-ansi": "4.0.0",
-            "which": "1.3.1",
-            "yargs": "11.1.0"
+            "ansi-escapes": "^3.0.0",
+            "chalk": "^2.0.1",
+            "exit": "^0.1.2",
+            "glob": "^7.1.2",
+            "graceful-fs": "^4.1.11",
+            "import-local": "^1.0.0",
+            "is-ci": "^1.0.10",
+            "istanbul-api": "^1.3.1",
+            "istanbul-lib-coverage": "^1.2.0",
+            "istanbul-lib-instrument": "^1.10.1",
+            "istanbul-lib-source-maps": "^1.2.4",
+            "jest-changed-files": "^23.4.2",
+            "jest-config": "^23.6.0",
+            "jest-environment-jsdom": "^23.4.0",
+            "jest-get-type": "^22.1.0",
+            "jest-haste-map": "^23.6.0",
+            "jest-message-util": "^23.4.0",
+            "jest-regex-util": "^23.3.0",
+            "jest-resolve-dependencies": "^23.6.0",
+            "jest-runner": "^23.6.0",
+            "jest-runtime": "^23.6.0",
+            "jest-snapshot": "^23.6.0",
+            "jest-util": "^23.4.0",
+            "jest-validate": "^23.6.0",
+            "jest-watcher": "^23.4.0",
+            "jest-worker": "^23.2.0",
+            "micromatch": "^2.3.11",
+            "node-notifier": "^5.2.1",
+            "prompts": "^0.1.9",
+            "realpath-native": "^1.0.0",
+            "rimraf": "^2.5.4",
+            "slash": "^1.0.0",
+            "string-length": "^2.0.0",
+            "strip-ansi": "^4.0.0",
+            "which": "^1.2.12",
+            "yargs": "^11.0.0"
           }
         },
         "strip-ansi": {
@@ -9534,27 +8658,27 @@
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "3.0.0"
+            "ansi-regex": "^3.0.0"
           }
         },
         "yargs": {
           "version": "11.1.0",
-          "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
           "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
           "dev": true,
           "requires": {
-            "cliui": "4.1.0",
-            "decamelize": "1.2.0",
-            "find-up": "2.1.0",
-            "get-caller-file": "1.0.3",
-            "os-locale": "2.1.0",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "2.1.1",
-            "which-module": "2.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "9.0.2"
+            "cliui": "^4.0.0",
+            "decamelize": "^1.1.1",
+            "find-up": "^2.1.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^9.0.2"
           }
         }
       }
@@ -9565,7 +8689,7 @@
       "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==",
       "dev": true,
       "requires": {
-        "throat": "4.1.0"
+        "throat": "^4.0.0"
       }
     },
     "jest-config": {
@@ -9574,20 +8698,20 @@
       "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==",
       "dev": true,
       "requires": {
-        "babel-core": "6.26.3",
-        "babel-jest": "23.6.0",
-        "chalk": "2.4.1",
-        "glob": "7.1.3",
-        "jest-environment-jsdom": "23.4.0",
-        "jest-environment-node": "23.4.0",
-        "jest-get-type": "22.4.3",
-        "jest-jasmine2": "23.6.0",
-        "jest-regex-util": "23.3.0",
-        "jest-resolve": "23.6.0",
-        "jest-util": "23.4.0",
-        "jest-validate": "23.6.0",
-        "micromatch": "2.3.11",
-        "pretty-format": "23.6.0"
+        "babel-core": "^6.0.0",
+        "babel-jest": "^23.6.0",
+        "chalk": "^2.0.1",
+        "glob": "^7.1.1",
+        "jest-environment-jsdom": "^23.4.0",
+        "jest-environment-node": "^23.4.0",
+        "jest-get-type": "^22.1.0",
+        "jest-jasmine2": "^23.6.0",
+        "jest-regex-util": "^23.3.0",
+        "jest-resolve": "^23.6.0",
+        "jest-util": "^23.4.0",
+        "jest-validate": "^23.6.0",
+        "micromatch": "^2.3.11",
+        "pretty-format": "^23.6.0"
       },
       "dependencies": {
         "glob": {
@@ -9596,12 +8720,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
@@ -9612,10 +8736,10 @@
       "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "diff": "3.5.0",
-        "jest-get-type": "22.4.3",
-        "pretty-format": "23.6.0"
+        "chalk": "^2.0.1",
+        "diff": "^3.2.0",
+        "jest-get-type": "^22.1.0",
+        "pretty-format": "^23.6.0"
       }
     },
     "jest-docblock": {
@@ -9624,7 +8748,7 @@
       "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=",
       "dev": true,
       "requires": {
-        "detect-newline": "2.1.0"
+        "detect-newline": "^2.1.0"
       }
     },
     "jest-each": {
@@ -9633,8 +8757,8 @@
       "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "pretty-format": "23.6.0"
+        "chalk": "^2.0.1",
+        "pretty-format": "^23.6.0"
       }
     },
     "jest-environment-jsdom": {
@@ -9643,9 +8767,9 @@
       "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=",
       "dev": true,
       "requires": {
-        "jest-mock": "23.2.0",
-        "jest-util": "23.4.0",
-        "jsdom": "11.12.0"
+        "jest-mock": "^23.2.0",
+        "jest-util": "^23.4.0",
+        "jsdom": "^11.5.1"
       }
     },
     "jest-environment-node": {
@@ -9654,13 +8778,13 @@
       "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=",
       "dev": true,
       "requires": {
-        "jest-mock": "23.2.0",
-        "jest-util": "23.4.0"
+        "jest-mock": "^23.2.0",
+        "jest-util": "^23.4.0"
       }
     },
     "jest-get-type": {
       "version": "22.4.3",
-      "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
       "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
       "dev": true
     },
@@ -9670,14 +8794,14 @@
       "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==",
       "dev": true,
       "requires": {
-        "fb-watchman": "2.0.0",
-        "graceful-fs": "4.1.11",
-        "invariant": "2.2.4",
-        "jest-docblock": "23.2.0",
-        "jest-serializer": "23.0.1",
-        "jest-worker": "23.2.0",
-        "micromatch": "2.3.11",
-        "sane": "2.5.2"
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.1.11",
+        "invariant": "^2.2.4",
+        "jest-docblock": "^23.2.0",
+        "jest-serializer": "^23.0.1",
+        "jest-worker": "^23.2.0",
+        "micromatch": "^2.3.11",
+        "sane": "^2.0.0"
       }
     },
     "jest-jasmine2": {
@@ -9686,18 +8810,18 @@
       "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==",
       "dev": true,
       "requires": {
-        "babel-traverse": "6.26.0",
-        "chalk": "2.4.1",
-        "co": "4.6.0",
-        "expect": "23.6.0",
-        "is-generator-fn": "1.0.0",
-        "jest-diff": "23.6.0",
-        "jest-each": "23.6.0",
-        "jest-matcher-utils": "23.6.0",
-        "jest-message-util": "23.4.0",
-        "jest-snapshot": "23.6.0",
-        "jest-util": "23.4.0",
-        "pretty-format": "23.6.0"
+        "babel-traverse": "^6.0.0",
+        "chalk": "^2.0.1",
+        "co": "^4.6.0",
+        "expect": "^23.6.0",
+        "is-generator-fn": "^1.0.0",
+        "jest-diff": "^23.6.0",
+        "jest-each": "^23.6.0",
+        "jest-matcher-utils": "^23.6.0",
+        "jest-message-util": "^23.4.0",
+        "jest-snapshot": "^23.6.0",
+        "jest-util": "^23.4.0",
+        "pretty-format": "^23.6.0"
       }
     },
     "jest-leak-detector": {
@@ -9706,7 +8830,7 @@
       "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==",
       "dev": true,
       "requires": {
-        "pretty-format": "23.6.0"
+        "pretty-format": "^23.6.0"
       }
     },
     "jest-matcher-utils": {
@@ -9715,9 +8839,9 @@
       "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "jest-get-type": "22.4.3",
-        "pretty-format": "23.6.0"
+        "chalk": "^2.0.1",
+        "jest-get-type": "^22.1.0",
+        "pretty-format": "^23.6.0"
       }
     },
     "jest-message-util": {
@@ -9726,11 +8850,11 @@
       "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "7.0.0-beta.44",
-        "chalk": "2.4.1",
-        "micromatch": "2.3.11",
-        "slash": "1.0.0",
-        "stack-utils": "1.0.1"
+        "@babel/code-frame": "^7.0.0-beta.35",
+        "chalk": "^2.0.1",
+        "micromatch": "^2.3.11",
+        "slash": "^1.0.0",
+        "stack-utils": "^1.0.1"
       }
     },
     "jest-mock": {
@@ -9751,9 +8875,9 @@
       "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==",
       "dev": true,
       "requires": {
-        "browser-resolve": "1.11.3",
-        "chalk": "2.4.1",
-        "realpath-native": "1.0.2"
+        "browser-resolve": "^1.11.3",
+        "chalk": "^2.0.1",
+        "realpath-native": "^1.0.0"
       }
     },
     "jest-resolve-dependencies": {
@@ -9762,8 +8886,8 @@
       "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==",
       "dev": true,
       "requires": {
-        "jest-regex-util": "23.3.0",
-        "jest-snapshot": "23.6.0"
+        "jest-regex-util": "^23.3.0",
+        "jest-snapshot": "^23.6.0"
       }
     },
     "jest-runner": {
@@ -9772,19 +8896,19 @@
       "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==",
       "dev": true,
       "requires": {
-        "exit": "0.1.2",
-        "graceful-fs": "4.1.11",
-        "jest-config": "23.6.0",
-        "jest-docblock": "23.2.0",
-        "jest-haste-map": "23.6.0",
-        "jest-jasmine2": "23.6.0",
-        "jest-leak-detector": "23.6.0",
-        "jest-message-util": "23.4.0",
-        "jest-runtime": "23.6.0",
-        "jest-util": "23.4.0",
-        "jest-worker": "23.2.0",
-        "source-map-support": "0.5.9",
-        "throat": "4.1.0"
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.1.11",
+        "jest-config": "^23.6.0",
+        "jest-docblock": "^23.2.0",
+        "jest-haste-map": "^23.6.0",
+        "jest-jasmine2": "^23.6.0",
+        "jest-leak-detector": "^23.6.0",
+        "jest-message-util": "^23.4.0",
+        "jest-runtime": "^23.6.0",
+        "jest-util": "^23.4.0",
+        "jest-worker": "^23.2.0",
+        "source-map-support": "^0.5.6",
+        "throat": "^4.0.0"
       },
       "dependencies": {
         "source-map": {
@@ -9799,8 +8923,8 @@
           "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
           "dev": true,
           "requires": {
-            "buffer-from": "1.1.1",
-            "source-map": "0.6.1"
+            "buffer-from": "^1.0.0",
+            "source-map": "^0.6.0"
           }
         }
       }
@@ -9811,27 +8935,27 @@
       "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==",
       "dev": true,
       "requires": {
-        "babel-core": "6.26.3",
-        "babel-plugin-istanbul": "4.1.6",
-        "chalk": "2.4.1",
-        "convert-source-map": "1.6.0",
-        "exit": "0.1.2",
-        "fast-json-stable-stringify": "2.0.0",
-        "graceful-fs": "4.1.11",
-        "jest-config": "23.6.0",
-        "jest-haste-map": "23.6.0",
-        "jest-message-util": "23.4.0",
-        "jest-regex-util": "23.3.0",
-        "jest-resolve": "23.6.0",
-        "jest-snapshot": "23.6.0",
-        "jest-util": "23.4.0",
-        "jest-validate": "23.6.0",
-        "micromatch": "2.3.11",
-        "realpath-native": "1.0.2",
-        "slash": "1.0.0",
+        "babel-core": "^6.0.0",
+        "babel-plugin-istanbul": "^4.1.6",
+        "chalk": "^2.0.1",
+        "convert-source-map": "^1.4.0",
+        "exit": "^0.1.2",
+        "fast-json-stable-stringify": "^2.0.0",
+        "graceful-fs": "^4.1.11",
+        "jest-config": "^23.6.0",
+        "jest-haste-map": "^23.6.0",
+        "jest-message-util": "^23.4.0",
+        "jest-regex-util": "^23.3.0",
+        "jest-resolve": "^23.6.0",
+        "jest-snapshot": "^23.6.0",
+        "jest-util": "^23.4.0",
+        "jest-validate": "^23.6.0",
+        "micromatch": "^2.3.11",
+        "realpath-native": "^1.0.0",
+        "slash": "^1.0.0",
         "strip-bom": "3.0.0",
-        "write-file-atomic": "2.3.0",
-        "yargs": "11.1.0"
+        "write-file-atomic": "^2.1.0",
+        "yargs": "^11.0.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -9846,9 +8970,9 @@
           "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
           "dev": true,
           "requires": {
-            "string-width": "2.1.1",
-            "strip-ansi": "4.0.0",
-            "wrap-ansi": "2.1.0"
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.0.0"
           }
         },
         "strip-ansi": {
@@ -9857,27 +8981,27 @@
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "3.0.0"
+            "ansi-regex": "^3.0.0"
           }
         },
         "yargs": {
           "version": "11.1.0",
-          "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz",
           "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==",
           "dev": true,
           "requires": {
-            "cliui": "4.1.0",
-            "decamelize": "1.2.0",
-            "find-up": "2.1.0",
-            "get-caller-file": "1.0.3",
-            "os-locale": "2.1.0",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "2.1.1",
-            "which-module": "2.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "9.0.2"
+            "cliui": "^4.0.0",
+            "decamelize": "^1.1.1",
+            "find-up": "^2.1.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^9.0.2"
           }
         }
       }
@@ -9894,16 +9018,16 @@
       "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==",
       "dev": true,
       "requires": {
-        "babel-types": "6.26.0",
-        "chalk": "2.4.1",
-        "jest-diff": "23.6.0",
-        "jest-matcher-utils": "23.6.0",
-        "jest-message-util": "23.4.0",
-        "jest-resolve": "23.6.0",
-        "mkdirp": "0.5.1",
-        "natural-compare": "1.4.0",
-        "pretty-format": "23.6.0",
-        "semver": "5.6.0"
+        "babel-types": "^6.0.0",
+        "chalk": "^2.0.1",
+        "jest-diff": "^23.6.0",
+        "jest-matcher-utils": "^23.6.0",
+        "jest-message-util": "^23.4.0",
+        "jest-resolve": "^23.6.0",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^23.6.0",
+        "semver": "^5.5.0"
       },
       "dependencies": {
         "semver": {
@@ -9920,14 +9044,14 @@
       "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=",
       "dev": true,
       "requires": {
-        "callsites": "2.0.0",
-        "chalk": "2.4.1",
-        "graceful-fs": "4.1.11",
-        "is-ci": "1.2.1",
-        "jest-message-util": "23.4.0",
-        "mkdirp": "0.5.1",
-        "slash": "1.0.0",
-        "source-map": "0.6.1"
+        "callsites": "^2.0.0",
+        "chalk": "^2.0.1",
+        "graceful-fs": "^4.1.11",
+        "is-ci": "^1.0.10",
+        "jest-message-util": "^23.4.0",
+        "mkdirp": "^0.5.1",
+        "slash": "^1.0.0",
+        "source-map": "^0.6.0"
       },
       "dependencies": {
         "callsites": {
@@ -9950,10 +9074,10 @@
       "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "jest-get-type": "22.4.3",
-        "leven": "2.1.0",
-        "pretty-format": "23.6.0"
+        "chalk": "^2.0.1",
+        "jest-get-type": "^22.1.0",
+        "leven": "^2.1.0",
+        "pretty-format": "^23.6.0"
       }
     },
     "jest-watcher": {
@@ -9962,9 +9086,9 @@
       "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=",
       "dev": true,
       "requires": {
-        "ansi-escapes": "3.1.0",
-        "chalk": "2.4.1",
-        "string-length": "2.0.0"
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.1",
+        "string-length": "^2.0.0"
       }
     },
     "jest-worker": {
@@ -9973,7 +9097,7 @@
       "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=",
       "dev": true,
       "requires": {
-        "merge-stream": "1.0.1"
+        "merge-stream": "^1.0.1"
       }
     },
     "js-base64": {
@@ -9993,8 +9117,8 @@
       "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
       "dev": true,
       "requires": {
-        "argparse": "1.0.10",
-        "esprima": "2.7.3"
+        "argparse": "^1.0.7",
+        "esprima": "^2.6.0"
       },
       "dependencies": {
         "esprima": {
@@ -10011,7 +9135,7 @@
       "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
       "dev": true,
       "requires": {
-        "xmlcreate": "1.0.2"
+        "xmlcreate": "^1.0.1"
       }
     },
     "jsbn": {
@@ -10027,17 +9151,17 @@
       "dev": true,
       "requires": {
         "babylon": "7.0.0-beta.19",
-        "bluebird": "3.5.2",
-        "catharsis": "0.8.9",
-        "escape-string-regexp": "1.0.5",
-        "js2xmlparser": "3.0.0",
-        "klaw": "2.0.0",
-        "marked": "0.3.19",
-        "mkdirp": "0.5.1",
-        "requizzle": "0.2.1",
-        "strip-json-comments": "2.0.1",
+        "bluebird": "~3.5.0",
+        "catharsis": "~0.8.9",
+        "escape-string-regexp": "~1.0.5",
+        "js2xmlparser": "~3.0.0",
+        "klaw": "~2.0.0",
+        "marked": "~0.3.6",
+        "mkdirp": "~0.5.1",
+        "requizzle": "~0.2.1",
+        "strip-json-comments": "~2.0.1",
         "taffydb": "2.6.2",
-        "underscore": "1.8.3"
+        "underscore": "~1.8.3"
       },
       "dependencies": {
         "babylon": {
@@ -10054,15 +9178,15 @@
       "integrity": "sha512-dfYq9JgB+XahY0XfSEw93PmXmocjwYcvJ5aMuQUJ/OdDRGWamf2SSOk3W06Bsj8qdjp/UdefzqpP/mpwsvHuvA==",
       "dev": true,
       "requires": {
-        "array-back": "2.0.0",
-        "cache-point": "0.4.1",
-        "collect-all": "1.0.3",
-        "file-set": "2.0.1",
-        "fs-then-native": "2.0.0",
-        "jsdoc": "3.5.5",
-        "object-to-spawn-args": "1.1.1",
-        "temp-path": "1.0.0",
-        "walk-back": "3.0.0"
+        "array-back": "^2.0.0",
+        "cache-point": "^0.4.1",
+        "collect-all": "^1.0.3",
+        "file-set": "^2.0.0",
+        "fs-then-native": "^2.0.0",
+        "jsdoc": "~3.5.5",
+        "object-to-spawn-args": "^1.1.1",
+        "temp-path": "^1.0.0",
+        "walk-back": "^3.0.0"
       }
     },
     "jsdoc-parse": {
@@ -10071,12 +9195,12 @@
       "integrity": "sha512-btZLp4wYl90vcAfgk4hoGQbO17iBVrhh3LJRMKZNtZgniO3F8H2CjxXld0owBIB1XxN+j3bAcWZnZKMnSj3iMA==",
       "dev": true,
       "requires": {
-        "array-back": "2.0.0",
-        "lodash.omit": "4.5.0",
-        "lodash.pick": "4.4.0",
-        "reduce-extract": "1.0.0",
-        "sort-array": "2.0.0",
-        "test-value": "3.0.0"
+        "array-back": "^2.0.0",
+        "lodash.omit": "^4.5.0",
+        "lodash.pick": "^4.4.0",
+        "reduce-extract": "^1.0.0",
+        "sort-array": "^2.0.0",
+        "test-value": "^3.0.0"
       }
     },
     "jsdoc-to-markdown": {
@@ -10085,13 +9209,13 @@
       "integrity": "sha512-LHJRoLoLyDdxNcColgkLoB/rFG5iRP+PNJjMILI0x+95IdEAtyjSt0wJ6ZlKxRpkhBYtQXTQQ119hMqPIUZzTQ==",
       "dev": true,
       "requires": {
-        "array-back": "2.0.0",
-        "command-line-tool": "0.8.0",
-        "config-master": "3.1.0",
-        "dmd": "3.0.13",
-        "jsdoc-api": "4.0.3",
-        "jsdoc-parse": "3.0.1",
-        "walk-back": "3.0.0"
+        "array-back": "^2.0.0",
+        "command-line-tool": "^0.8.0",
+        "config-master": "^3.1.0",
+        "dmd": "^3.0.10",
+        "jsdoc-api": "^4.0.1",
+        "jsdoc-parse": "^3.0.1",
+        "walk-back": "^3.0.0"
       }
     },
     "jsdom": {
@@ -10100,32 +9224,32 @@
       "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
       "dev": true,
       "requires": {
-        "abab": "2.0.0",
-        "acorn": "5.7.3",
-        "acorn-globals": "4.3.0",
-        "array-equal": "1.0.0",
-        "cssom": "0.3.4",
-        "cssstyle": "1.1.1",
-        "data-urls": "1.0.1",
-        "domexception": "1.0.1",
-        "escodegen": "1.11.0",
-        "html-encoding-sniffer": "1.0.2",
-        "left-pad": "1.3.0",
-        "nwsapi": "2.0.9",
+        "abab": "^2.0.0",
+        "acorn": "^5.5.3",
+        "acorn-globals": "^4.1.0",
+        "array-equal": "^1.0.0",
+        "cssom": ">= 0.3.2 < 0.4.0",
+        "cssstyle": "^1.0.0",
+        "data-urls": "^1.0.0",
+        "domexception": "^1.0.1",
+        "escodegen": "^1.9.1",
+        "html-encoding-sniffer": "^1.0.2",
+        "left-pad": "^1.3.0",
+        "nwsapi": "^2.0.7",
         "parse5": "4.0.0",
-        "pn": "1.1.0",
-        "request": "2.88.0",
-        "request-promise-native": "1.0.5",
-        "sax": "1.2.4",
-        "symbol-tree": "3.2.2",
-        "tough-cookie": "2.4.3",
-        "w3c-hr-time": "1.0.1",
-        "webidl-conversions": "4.0.2",
-        "whatwg-encoding": "1.0.5",
-        "whatwg-mimetype": "2.2.0",
-        "whatwg-url": "6.5.0",
-        "ws": "5.2.2",
-        "xml-name-validator": "3.0.0"
+        "pn": "^1.1.0",
+        "request": "^2.87.0",
+        "request-promise-native": "^1.0.5",
+        "sax": "^1.2.4",
+        "symbol-tree": "^3.2.2",
+        "tough-cookie": "^2.3.4",
+        "w3c-hr-time": "^1.0.1",
+        "webidl-conversions": "^4.0.2",
+        "whatwg-encoding": "^1.0.3",
+        "whatwg-mimetype": "^2.1.0",
+        "whatwg-url": "^6.4.1",
+        "ws": "^5.2.0",
+        "xml-name-validator": "^3.0.0"
       }
     },
     "jsesc": {
@@ -10154,7 +9278,8 @@
     "json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true
     },
     "json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
@@ -10169,15 +9294,15 @@
     },
     "json5": {
       "version": "1.0.1",
-      "resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
       "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
       "requires": {
-        "minimist": "1.2.0"
+        "minimist": "^1.2.0"
       },
       "dependencies": {
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         }
       }
@@ -10187,7 +9312,7 @@
       "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.0.4.tgz",
       "integrity": "sha1-lGZaS3caq+y4qshBNbmVlHVpGL0=",
       "requires": {
-        "debug": "4.1.0"
+        "debug": "*"
       }
     },
     "jsprim": {
@@ -10202,32 +9327,13 @@
         "verror": "1.10.0"
       }
     },
-    "jstransform": {
-      "version": "11.0.3",
-      "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz",
-      "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=",
-      "requires": {
-        "base62": "1.2.8",
-        "commoner": "0.10.8",
-        "esprima-fb": "15001.1.0-dev-harmony-fb",
-        "object-assign": "2.1.1",
-        "source-map": "0.4.4"
-      },
-      "dependencies": {
-        "object-assign": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
-          "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo="
-        }
-      }
-    },
     "jsx-ast-utils": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
       "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
       "dev": true,
       "requires": {
-        "array-includes": "3.0.3"
+        "array-includes": "^3.0.3"
       }
     },
     "just-curry-it": {
@@ -10235,20 +9341,13 @@
       "resolved": "https://registry.npmjs.org/just-curry-it/-/just-curry-it-3.1.0.tgz",
       "integrity": "sha512-mjzgSOFzlrurlURaHVjnQodyPNvrHrf1TbQP2XU9NSqBtHQPuHZ+Eb6TAJP7ASeJN9h9K0KXoRTs8u6ouHBKvg=="
     },
-    "jwt-decode": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-1.5.1.tgz",
-      "integrity": "sha1-vajYcxubc57otKMaDQJcqUrpLTs=",
-      "requires": {
-        "Base64": "0.1.4"
-      }
-    },
     "kind-of": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "dev": true,
       "requires": {
-        "is-buffer": "1.1.6"
+        "is-buffer": "^1.1.5"
       }
     },
     "klaw": {
@@ -10257,7 +9356,7 @@
       "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11"
+        "graceful-fs": "^4.1.9"
       }
     },
     "kleur": {
@@ -10278,22 +9377,17 @@
       "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==",
       "dev": true,
       "requires": {
-        "lodash": "4.17.11",
-        "webpack-sources": "1.3.0"
+        "lodash": "^4.17.5",
+        "webpack-sources": "^1.1.0"
       }
     },
-    "lazy-cache": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
-      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
-    },
     "lcid": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
       "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
       "dev": true,
       "requires": {
-        "invert-kv": "1.0.0"
+        "invert-kv": "^1.0.0"
       }
     },
     "le_node": {
@@ -10334,42 +9428,25 @@
       "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
       "dev": true,
       "requires": {
-        "prelude-ls": "1.1.2",
-        "type-check": "0.3.2"
-      }
-    },
-    "libphonenumber-js": {
-      "version": "1.7.15",
-      "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.7.15.tgz",
-      "integrity": "sha512-FYqkPqPc8ZBAeGiCuU/4eKqvCyBP281DtayXoc+9XuRhgARn+CCTvy30VjfCevPROQkVxZKe2SfWj4d/3VrmVw==",
-      "requires": {
-        "minimist": "1.2.0",
-        "semver-compare": "1.0.0",
-        "xml2js": "0.4.19"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
-        }
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
       }
     },
     "load-json-file": {
       "version": "2.0.0",
-      "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
       "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "parse-json": "2.2.0",
-        "pify": "2.3.0",
-        "strip-bom": "3.0.0"
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "strip-bom": "^3.0.0"
       },
       "dependencies": {
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         }
@@ -10387,9 +9464,9 @@
       "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
       "dev": true,
       "requires": {
-        "big.js": "3.2.0",
-        "emojis-list": "2.1.0",
-        "json5": "0.5.1"
+        "big.js": "^3.1.3",
+        "emojis-list": "^2.0.0",
+        "json5": "^0.5.0"
       },
       "dependencies": {
         "json5": {
@@ -10406,8 +9483,8 @@
       "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
       "dev": true,
       "requires": {
-        "p-locate": "2.0.0",
-        "path-exists": "3.0.0"
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
       }
     },
     "lodash": {
@@ -10432,8 +9509,8 @@
       "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
       "dev": true,
       "requires": {
-        "lodash._basecopy": "3.0.1",
-        "lodash.keys": "3.1.2"
+        "lodash._basecopy": "^3.0.0",
+        "lodash.keys": "^3.0.0"
       }
     },
     "lodash._basecopy": {
@@ -10448,7 +9525,7 @@
       "integrity": "sha1-z4cGVyyhROjZ11InyZDamC+TKvM=",
       "dev": true,
       "requires": {
-        "lodash.keys": "3.1.2"
+        "lodash.keys": "^3.0.0"
       }
     },
     "lodash._bindcallback": {
@@ -10463,9 +9540,9 @@
       "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=",
       "dev": true,
       "requires": {
-        "lodash._bindcallback": "3.0.1",
-        "lodash._isiterateecall": "3.0.9",
-        "lodash.restparam": "3.6.1"
+        "lodash._bindcallback": "^3.0.0",
+        "lodash._isiterateecall": "^3.0.0",
+        "lodash.restparam": "^3.0.0"
       }
     },
     "lodash._getnative": {
@@ -10506,7 +9583,7 @@
       "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-3.1.1.tgz",
       "integrity": "sha1-gSIRw3ipTMKdWqTjNGzwv846ffU=",
       "requires": {
-        "lodash._getnative": "3.9.1"
+        "lodash._getnative": "^3.0.0"
       }
     },
     "lodash.defaults": {
@@ -10526,10 +9603,10 @@
       "integrity": "sha1-b9fvt5aRrs1n/erCdhyY5wHWw5o=",
       "dev": true,
       "requires": {
-        "lodash._arrayeach": "3.0.0",
-        "lodash._baseeach": "3.0.4",
-        "lodash._bindcallback": "3.0.1",
-        "lodash.isarray": "3.0.4"
+        "lodash._arrayeach": "^3.0.0",
+        "lodash._baseeach": "^3.0.0",
+        "lodash._bindcallback": "^3.0.0",
+        "lodash.isarray": "^3.0.0"
       }
     },
     "lodash.isarguments": {
@@ -10556,9 +9633,9 @@
       "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
       "dev": true,
       "requires": {
-        "lodash._getnative": "3.9.1",
-        "lodash.isarguments": "3.1.0",
-        "lodash.isarray": "3.0.4"
+        "lodash._getnative": "^3.0.0",
+        "lodash.isarguments": "^3.0.0",
+        "lodash.isarray": "^3.0.0"
       }
     },
     "lodash.memoize": {
@@ -10620,19 +9697,9 @@
       "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1"
+        "chalk": "^2.0.1"
       }
     },
-    "lolex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz",
-      "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE="
-    },
-    "longest": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
-      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
-    },
     "longest-streak": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz",
@@ -10644,7 +9711,7 @@
       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
       "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
       "requires": {
-        "js-tokens": "4.0.0"
+        "js-tokens": "^3.0.0 || ^4.0.0"
       }
     },
     "loud-rejection": {
@@ -10653,21 +9720,8 @@
       "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
       "dev": true,
       "requires": {
-        "currently-unhandled": "0.4.1",
-        "signal-exit": "3.0.2"
-      }
-    },
-    "lower-case": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
-      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
-    },
-    "lower-case-first": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz",
-      "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=",
-      "requires": {
-        "lower-case": "1.1.4"
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
       }
     },
     "lru-cache": {
@@ -10676,8 +9730,8 @@
       "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
       "dev": true,
       "requires": {
-        "pseudomap": "1.0.2",
-        "yallist": "2.1.2"
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
       }
     },
     "make-dir": {
@@ -10686,7 +9740,7 @@
       "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
       "dev": true,
       "requires": {
-        "pify": "3.0.0"
+        "pify": "^3.0.0"
       }
     },
     "makeerror": {
@@ -10695,7 +9749,7 @@
       "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
       "dev": true,
       "requires": {
-        "tmpl": "1.0.4"
+        "tmpl": "1.0.x"
       }
     },
     "map-age-cleaner": {
@@ -10704,7 +9758,7 @@
       "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==",
       "dev": true,
       "requires": {
-        "p-defer": "1.0.0"
+        "p-defer": "^1.0.0"
       }
     },
     "map-cache": {
@@ -10725,7 +9779,7 @@
       "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
       "dev": true,
       "requires": {
-        "object-visit": "1.0.1"
+        "object-visit": "^1.0.0"
       }
     },
     "markdown-escapes": {
@@ -10742,7 +9796,7 @@
     },
     "marked": {
       "version": "0.3.19",
-      "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz",
       "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==",
       "dev": true
     },
@@ -10764,25 +9818,15 @@
       "integrity": "sha512-3Zs9P/0zzwTob2pdgT0CHZuMbnSUSp8MB1bddfm+HDmnFWHGT4jvEZRf+2RuPoa+cjdn/z25SEt5gFTqdhvJAg==",
       "dev": true
     },
-    "md5": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
-      "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
-      "requires": {
-        "charenc": "0.0.2",
-        "crypt": "0.0.2",
-        "is-buffer": "1.1.6"
-      }
-    },
     "md5.js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
       "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
       "dev": true,
       "requires": {
-        "hash-base": "3.0.4",
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
     "mdast-util-compact": {
@@ -10791,12 +9835,12 @@
       "integrity": "sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==",
       "dev": true,
       "requires": {
-        "unist-util-visit": "1.4.0"
+        "unist-util-visit": "^1.1.0"
       }
     },
     "media-typer": {
       "version": "0.3.0",
-      "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
       "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
     },
     "mem": {
@@ -10805,7 +9849,7 @@
       "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
       "dev": true,
       "requires": {
-        "mimic-fn": "1.2.0"
+        "mimic-fn": "^1.0.0"
       }
     },
     "memory-fs": {
@@ -10814,26 +9858,26 @@
       "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
       "dev": true,
       "requires": {
-        "errno": "0.1.7",
-        "readable-stream": "2.0.6"
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
       }
     },
     "meow": {
       "version": "3.7.0",
-      "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
       "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
       "dev": true,
       "requires": {
-        "camelcase-keys": "2.1.0",
-        "decamelize": "1.2.0",
-        "loud-rejection": "1.6.0",
-        "map-obj": "1.0.1",
-        "minimist": "1.2.0",
-        "normalize-package-data": "2.4.0",
-        "object-assign": "4.1.1",
-        "read-pkg-up": "1.0.1",
-        "redent": "1.0.0",
-        "trim-newlines": "1.0.0"
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
       },
       "dependencies": {
         "find-up": {
@@ -10842,26 +9886,26 @@
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "dev": true,
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "load-json-file": {
           "version": "1.1.0",
-          "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
           "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "parse-json": "2.2.0",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1",
-            "strip-bom": "2.0.0"
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
           }
         },
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
           "dev": true
         },
@@ -10871,7 +9915,7 @@
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "dev": true,
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         },
         "path-type": {
@@ -10880,14 +9924,14 @@
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         },
@@ -10897,9 +9941,9 @@
           "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
           "dev": true,
           "requires": {
-            "load-json-file": "1.1.0",
-            "normalize-package-data": "2.4.0",
-            "path-type": "1.1.0"
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
           }
         },
         "read-pkg-up": {
@@ -10908,8 +9952,8 @@
           "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
           "dev": true,
           "requires": {
-            "find-up": "1.1.2",
-            "read-pkg": "1.1.0"
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
           }
         },
         "strip-bom": {
@@ -10918,7 +9962,7 @@
           "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
           "dev": true,
           "requires": {
-            "is-utf8": "0.2.1"
+            "is-utf8": "^0.2.0"
           }
         }
       }
@@ -10940,7 +9984,7 @@
       "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
       "dev": true,
       "requires": {
-        "readable-stream": "2.0.6"
+        "readable-stream": "^2.0.1"
       }
     },
     "merge2": {
@@ -10960,19 +10004,19 @@
       "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
       "dev": true,
       "requires": {
-        "arr-diff": "2.0.0",
-        "array-unique": "0.2.1",
-        "braces": "1.8.5",
-        "expand-brackets": "0.1.5",
-        "extglob": "0.3.2",
-        "filename-regex": "2.0.1",
-        "is-extglob": "1.0.0",
-        "is-glob": "2.0.1",
-        "kind-of": "3.2.2",
-        "normalize-path": "2.1.1",
-        "object.omit": "2.0.1",
-        "parse-glob": "3.0.4",
-        "regex-cache": "0.4.4"
+        "arr-diff": "^2.0.0",
+        "array-unique": "^0.2.1",
+        "braces": "^1.8.2",
+        "expand-brackets": "^0.1.4",
+        "extglob": "^0.3.1",
+        "filename-regex": "^2.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.1",
+        "kind-of": "^3.0.2",
+        "normalize-path": "^2.0.1",
+        "object.omit": "^2.0.0",
+        "parse-glob": "^3.0.4",
+        "regex-cache": "^0.4.2"
       }
     },
     "miller-rabin": {
@@ -10981,8 +10025,8 @@
       "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "brorand": "1.1.0"
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
       }
     },
     "mime": {
@@ -11000,7 +10044,7 @@
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
       "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
       "requires": {
-        "mime-db": "1.37.0"
+        "mime-db": "~1.37.0"
       }
     },
     "mimic-fn": {
@@ -11015,7 +10059,7 @@
       "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
       "dev": true,
       "requires": {
-        "dom-walk": "0.1.1"
+        "dom-walk": "^0.1.0"
       }
     },
     "mini-css-extract-plugin": {
@@ -11024,9 +10068,9 @@
       "integrity": "sha512-o+Jm+ocb0asEngdM6FsZWtZsRzA8koFUudIDwYUfl94M3PejPHG7Vopw5hN9V8WsMkSFpm3tZP3Fesz89EyrfQ==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "schema-utils": "1.0.0",
-        "webpack-sources": "1.3.0"
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
       },
       "dependencies": {
         "schema-utils": {
@@ -11035,9 +10079,9 @@
           "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
           "dev": true,
           "requires": {
-            "ajv": "6.5.4",
-            "ajv-errors": "1.0.0",
-            "ajv-keywords": "3.2.0"
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
           }
         }
       }
@@ -11058,14 +10102,16 @@
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "dev": true,
       "requires": {
-        "brace-expansion": "1.1.11"
+        "brace-expansion": "^1.1.7"
       }
     },
     "minimist": {
       "version": "0.0.8",
-      "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+      "dev": true
     },
     "minimist-options": {
       "version": "3.0.2",
@@ -11073,8 +10119,34 @@
       "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
       "dev": true,
       "requires": {
-        "arrify": "1.0.1",
-        "is-plain-obj": "1.1.0"
+        "arrify": "^1.0.1",
+        "is-plain-obj": "^1.1.0"
+      }
+    },
+    "minipass": {
+      "version": "2.3.5",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+      "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==",
+      "requires": {
+        "safe-buffer": "^5.1.2",
+        "yallist": "^3.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
+        }
+      }
+    },
+    "minizlib": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+      "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "minipass": "^2.2.1"
       }
     },
     "mississippi": {
@@ -11083,16 +10155,16 @@
       "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
       "dev": true,
       "requires": {
-        "concat-stream": "1.5.2",
-        "duplexify": "3.6.1",
-        "end-of-stream": "1.4.1",
-        "flush-write-stream": "1.0.3",
-        "from2": "2.3.0",
-        "parallel-transform": "1.1.0",
-        "pump": "2.0.1",
-        "pumpify": "1.5.1",
-        "stream-each": "1.2.3",
-        "through2": "2.0.3"
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^2.0.1",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
       }
     },
     "mixin-deep": {
@@ -11101,8 +10173,8 @@
       "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
       "dev": true,
       "requires": {
-        "for-in": "1.0.2",
-        "is-extendable": "1.0.1"
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
       },
       "dependencies": {
         "is-extendable": {
@@ -11111,7 +10183,7 @@
           "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
           "dev": true,
           "requires": {
-            "is-plain-object": "2.0.4"
+            "is-plain-object": "^2.0.4"
           }
         }
       }
@@ -11122,8 +10194,8 @@
       "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
       "dev": true,
       "requires": {
-        "for-in": "0.1.8",
-        "is-extendable": "0.1.1"
+        "for-in": "^0.1.3",
+        "is-extendable": "^0.1.1"
       },
       "dependencies": {
         "for-in": {
@@ -11136,8 +10208,9 @@
     },
     "mkdirp": {
       "version": "0.5.1",
-      "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
       "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
       "requires": {
         "minimist": "0.0.8"
       }
@@ -11175,7 +10248,7 @@
       "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz",
       "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==",
       "requires": {
-        "moment": "2.22.2"
+        "moment": ">= 2.9.0"
       }
     },
     "morgan": {
@@ -11183,11 +10256,11 @@
       "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
       "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
       "requires": {
-        "basic-auth": "2.0.1",
+        "basic-auth": "~2.0.0",
         "debug": "2.6.9",
-        "depd": "1.1.2",
-        "on-finished": "2.3.0",
-        "on-headers": "1.0.1"
+        "depd": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "on-headers": "~1.0.1"
       },
       "dependencies": {
         "debug": {
@@ -11211,12 +10284,12 @@
       "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0",
-        "copy-concurrently": "1.0.5",
-        "fs-write-stream-atomic": "1.0.10",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.6.2",
-        "run-queue": "1.0.3"
+        "aproba": "^1.1.1",
+        "copy-concurrently": "^1.0.0",
+        "fs-write-stream-atomic": "^1.0.8",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.3"
       }
     },
     "ms": {
@@ -11233,7 +10306,8 @@
     "nan": {
       "version": "2.11.1",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
-      "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA=="
+      "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+      "dev": true
     },
     "nanoid": {
       "version": "1.3.1",
@@ -11246,17 +10320,17 @@
       "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
       "dev": true,
       "requires": {
-        "arr-diff": "4.0.0",
-        "array-unique": "0.3.2",
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "fragment-cache": "0.2.1",
-        "is-windows": "1.0.2",
-        "kind-of": "6.0.2",
-        "object.pick": "1.3.0",
-        "regex-not": "1.0.2",
-        "snapdragon": "0.8.2",
-        "to-regex": "3.0.2"
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
       },
       "dependencies": {
         "arr-diff": {
@@ -11285,12 +10359,28 @@
       "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
       "dev": true
     },
-    "ncname": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
-      "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+    "needle": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz",
+      "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==",
+      "dev": true,
+      "optional": true,
       "requires": {
-        "xml-char-classes": "1.0.0"
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.4.4",
+        "sax": "^1.2.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
       }
     },
     "negotiator": {
@@ -11315,21 +10405,13 @@
       "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz",
       "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA="
     },
-    "node-bourbon": {
-      "version": "4.2.8",
-      "resolved": "https://registry.npmjs.org/node-bourbon/-/node-bourbon-4.2.8.tgz",
-      "integrity": "sha1-5ETx8JQ0q3ZQ6jGMKOLhA9P5Qs0=",
-      "requires": {
-        "bourbon": "4.3.4"
-      }
-    },
     "node-fetch": {
       "version": "1.7.3",
       "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
       "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
       "requires": {
-        "encoding": "0.1.12",
-        "is-stream": "1.1.0"
+        "encoding": "^0.1.11",
+        "is-stream": "^1.0.1"
       }
     },
     "node-forge": {
@@ -11343,18 +10425,18 @@
       "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
       "dev": true,
       "requires": {
-        "fstream": "1.0.11",
-        "glob": "7.1.3",
-        "graceful-fs": "4.1.11",
-        "mkdirp": "0.5.1",
-        "nopt": "3.0.6",
-        "npmlog": "4.1.2",
-        "osenv": "0.1.5",
-        "request": "2.88.0",
-        "rimraf": "2.6.2",
-        "semver": "5.3.0",
-        "tar": "2.2.1",
-        "which": "1.3.1"
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
       },
       "dependencies": {
         "glob": {
@@ -11363,17 +10445,17 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "semver": {
           "version": "5.3.0",
-          "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
           "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
           "dev": true
         }
@@ -11391,28 +10473,28 @@
       "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
       "dev": true,
       "requires": {
-        "assert": "1.4.1",
-        "browserify-zlib": "0.2.0",
-        "buffer": "4.9.1",
-        "console-browserify": "1.1.0",
-        "constants-browserify": "1.0.0",
-        "crypto-browserify": "3.12.0",
-        "domain-browser": "1.2.0",
-        "events": "1.1.1",
-        "https-browserify": "1.0.0",
-        "os-browserify": "0.3.0",
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^1.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
         "path-browserify": "0.0.0",
-        "process": "0.11.10",
-        "punycode": "1.4.1",
-        "querystring-es3": "0.2.1",
-        "readable-stream": "2.3.6",
-        "stream-browserify": "2.0.1",
-        "stream-http": "2.8.3",
-        "string_decoder": "1.1.1",
-        "timers-browserify": "2.0.10",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
         "tty-browserify": "0.0.0",
-        "url": "0.11.0",
-        "util": "0.10.4",
+        "url": "^0.11.0",
+        "util": "^0.10.3",
         "vm-browserify": "0.0.4"
       },
       "dependencies": {
@@ -11436,17 +10518,17 @@
         },
         "readable-stream": {
           "version": "2.3.6",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
           "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
           "dev": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "string_decoder": {
@@ -11455,7 +10537,7 @@
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         },
         "util": {
@@ -11469,25 +10551,16 @@
         }
       }
     },
-    "node-neat": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/node-neat/-/node-neat-1.7.2.tgz",
-      "integrity": "sha1-OEcpELgV4mG4sbmbpRmZRGWhXCE=",
-      "requires": {
-        "bourbon-neat": "1.7.2",
-        "node-bourbon": "4.2.8"
-      }
-    },
     "node-notifier": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.3.0.tgz",
       "integrity": "sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==",
       "dev": true,
       "requires": {
-        "growly": "1.3.0",
-        "semver": "5.6.0",
-        "shellwords": "0.1.1",
-        "which": "1.3.1"
+        "growly": "^1.3.0",
+        "semver": "^5.5.0",
+        "shellwords": "^0.1.1",
+        "which": "^1.3.0"
       },
       "dependencies": {
         "semver": {
@@ -11498,13 +10571,75 @@
         }
       }
     },
+    "node-pre-gyp": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
+      "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "detect-libc": "^1.0.2",
+        "mkdirp": "^0.5.1",
+        "needle": "^2.2.1",
+        "nopt": "^4.0.1",
+        "npm-packlist": "^1.1.6",
+        "npmlog": "^4.0.2",
+        "rc": "^1.2.7",
+        "rimraf": "^2.6.1",
+        "semver": "^5.3.0",
+        "tar": "^4"
+      },
+      "dependencies": {
+        "nopt": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+          "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+          "dev": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.10",
+          "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz",
+          "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.5",
+            "minizlib": "^1.2.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.3"
+          }
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
     "node-releases": {
       "version": "1.0.0-alpha.15",
       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.0-alpha.15.tgz",
       "integrity": "sha512-hKG6hd/g6a9OV/ARt2qrxbRhe/4WEMFohTLOB9PNyTYvvI59gICZFzt9/mMgpYUTts06qXlN8H6UjfbIRdnW8A==",
       "dev": true,
       "requires": {
-        "semver": "5.6.0"
+        "semver": "^5.3.0"
       },
       "dependencies": {
         "semver": {
@@ -11521,25 +10656,25 @@
       "integrity": "sha512-MXyurANsUoE4/6KmfMkwGcBzAnJQ5xJBGW7Ei6ea8KnUKuzHr/SguVBIi3uaUAHtZCPUYkvlJ3Ef5T5VAwVpaA==",
       "dev": true,
       "requires": {
-        "async-foreach": "0.1.3",
-        "chalk": "1.1.3",
-        "cross-spawn": "3.0.1",
-        "gaze": "1.1.3",
-        "get-stdin": "4.0.1",
-        "glob": "7.1.3",
-        "in-publish": "2.0.0",
-        "lodash.assign": "4.2.0",
-        "lodash.clonedeep": "4.5.0",
-        "lodash.mergewith": "4.6.1",
-        "meow": "3.7.0",
-        "mkdirp": "0.5.1",
-        "nan": "2.11.1",
-        "node-gyp": "3.8.0",
-        "npmlog": "4.1.2",
-        "request": "2.88.0",
-        "sass-graph": "2.2.4",
-        "stdout-stream": "1.4.1",
-        "true-case-path": "1.0.3"
+        "async-foreach": "^0.1.3",
+        "chalk": "^1.1.1",
+        "cross-spawn": "^3.0.0",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "in-publish": "^2.0.0",
+        "lodash.assign": "^4.2.0",
+        "lodash.clonedeep": "^4.3.2",
+        "lodash.mergewith": "^4.6.0",
+        "meow": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "nan": "^2.10.0",
+        "node-gyp": "^3.8.0",
+        "npmlog": "^4.0.0",
+        "request": "^2.88.0",
+        "sass-graph": "^2.2.4",
+        "stdout-stream": "^1.4.0",
+        "true-case-path": "^1.0.2"
       },
       "dependencies": {
         "ansi-styles": {
@@ -11550,15 +10685,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           }
         },
         "cross-spawn": {
@@ -11567,8 +10702,8 @@
           "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
           "dev": true,
           "requires": {
-            "lru-cache": "4.1.3",
-            "which": "1.3.1"
+            "lru-cache": "^4.0.1",
+            "which": "^1.2.9"
           }
         },
         "glob": {
@@ -11577,12 +10712,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "supports-color": {
@@ -11605,7 +10740,7 @@
       "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
       "dev": true,
       "requires": {
-        "abbrev": "1.1.1"
+        "abbrev": "1"
       }
     },
     "normalize-package-data": {
@@ -11614,10 +10749,10 @@
       "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
       "dev": true,
       "requires": {
-        "hosted-git-info": "2.7.1",
-        "is-builtin-module": "1.0.0",
-        "semver": "5.1.0",
-        "validate-npm-package-license": "3.0.4"
+        "hosted-git-info": "^2.1.4",
+        "is-builtin-module": "^1.0.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
       }
     },
     "normalize-path": {
@@ -11626,7 +10761,7 @@
       "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
       "dev": true,
       "requires": {
-        "remove-trailing-separator": "1.1.0"
+        "remove-trailing-separator": "^1.0.1"
       }
     },
     "normalize-range": {
@@ -11647,10 +10782,10 @@
       "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
       "dev": true,
       "requires": {
-        "object-assign": "4.1.1",
-        "prepend-http": "1.0.4",
-        "query-string": "4.3.4",
-        "sort-keys": "1.1.2"
+        "object-assign": "^4.0.1",
+        "prepend-http": "^1.0.0",
+        "query-string": "^4.1.0",
+        "sort-keys": "^1.0.0"
       },
       "dependencies": {
         "query-string": {
@@ -11659,26 +10794,29 @@
           "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
           "dev": true,
           "requires": {
-            "object-assign": "4.1.1",
-            "strict-uri-encode": "1.1.0"
+            "object-assign": "^4.1.0",
+            "strict-uri-encode": "^1.0.0"
           }
         }
       }
     },
-    "normalizr": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/normalizr/-/normalizr-1.4.1.tgz",
-      "integrity": "sha1-qjh8JGXxNhHK86rkK6+Y9wXoos4=",
-      "requires": {
-        "lodash": "3.10.1"
-      },
-      "dependencies": {
-        "lodash": {
-          "version": "3.10.1",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
-          "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
-        }
-      }
+    "npm-bundled": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
+      "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==",
+      "dev": true,
+      "optional": true
+    },
+    "npm-packlist": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz",
+      "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "ignore-walk": "^3.0.1",
+        "npm-bundled": "^1.0.1"
+      }
     },
     "npm-run-path": {
       "version": "2.0.2",
@@ -11686,7 +10824,7 @@
       "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
       "dev": true,
       "requires": {
-        "path-key": "2.0.1"
+        "path-key": "^2.0.0"
       }
     },
     "npmlog": {
@@ -11695,10 +10833,10 @@
       "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
       "dev": true,
       "requires": {
-        "are-we-there-yet": "1.1.5",
-        "console-control-strings": "1.1.0",
-        "gauge": "2.7.4",
-        "set-blocking": "2.0.0"
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
       }
     },
     "num2fraction": {
@@ -11736,9 +10874,9 @@
       "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
       "dev": true,
       "requires": {
-        "copy-descriptor": "0.1.1",
-        "define-property": "0.2.5",
-        "kind-of": "3.2.2"
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
       },
       "dependencies": {
         "define-property": {
@@ -11747,7 +10885,7 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         }
       }
@@ -11781,7 +10919,7 @@
       "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
       "dev": true,
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.0"
       },
       "dependencies": {
         "isobject": {
@@ -11798,10 +10936,10 @@
       "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3",
-        "function-bind": "1.1.1",
-        "has-symbols": "1.0.0",
-        "object-keys": "1.0.12"
+        "define-properties": "^1.1.2",
+        "function-bind": "^1.1.1",
+        "has-symbols": "^1.0.0",
+        "object-keys": "^1.0.11"
       },
       "dependencies": {
         "object-keys": {
@@ -11818,10 +10956,10 @@
       "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.12.0",
-        "function-bind": "1.1.1",
-        "has": "1.0.3"
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.6.1",
+        "function-bind": "^1.1.0",
+        "has": "^1.0.1"
       }
     },
     "object.getownpropertydescriptors": {
@@ -11830,8 +10968,8 @@
       "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3",
-        "es-abstract": "1.12.0"
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.1"
       }
     },
     "object.omit": {
@@ -11840,8 +10978,8 @@
       "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
       "dev": true,
       "requires": {
-        "for-own": "0.1.5",
-        "is-extendable": "0.1.1"
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
       }
     },
     "object.pick": {
@@ -11850,7 +10988,7 @@
       "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
       "dev": true,
       "requires": {
-        "isobject": "3.0.1"
+        "isobject": "^3.0.1"
       },
       "dependencies": {
         "isobject": {
@@ -11878,8 +11016,9 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
       "requires": {
-        "wrappy": "1.0.2"
+        "wrappy": "1"
       }
     },
     "onetime": {
@@ -11888,7 +11027,7 @@
       "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
       "dev": true,
       "requires": {
-        "mimic-fn": "1.2.0"
+        "mimic-fn": "^1.0.0"
       }
     },
     "optimist": {
@@ -11897,8 +11036,8 @@
       "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
       "dev": true,
       "requires": {
-        "minimist": "0.0.8",
-        "wordwrap": "0.0.2"
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
       }
     },
     "optimize-css-assets-webpack-plugin": {
@@ -11907,8 +11046,8 @@
       "integrity": "sha512-iOfMsuGMPbM/bZZ731gwtAXfXjIkR97BXqUXsPGIzBaQzpvqajsoIFlR+z+Q7FLcq2TmV4JFGo80d98ttfRzhA==",
       "dev": true,
       "requires": {
-        "cssnano": "3.10.0",
-        "last-call-webpack-plugin": "3.0.0"
+        "cssnano": "^3.10.0",
+        "last-call-webpack-plugin": "^3.0.0"
       }
     },
     "optionator": {
@@ -11917,12 +11056,12 @@
       "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
       "dev": true,
       "requires": {
-        "deep-is": "0.1.3",
-        "fast-levenshtein": "2.0.6",
-        "levn": "0.3.0",
-        "prelude-ls": "1.1.2",
-        "type-check": "0.3.2",
-        "wordwrap": "1.0.0"
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
       },
       "dependencies": {
         "wordwrap": {
@@ -11951,9 +11090,9 @@
       "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
       "dev": true,
       "requires": {
-        "execa": "0.7.0",
-        "lcid": "1.0.0",
-        "mem": "1.1.0"
+        "execa": "^0.7.0",
+        "lcid": "^1.0.0",
+        "mem": "^1.1.0"
       }
     },
     "os-tmpdir": {
@@ -11968,8 +11107,8 @@
       "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
       "dev": true,
       "requires": {
-        "os-homedir": "1.0.2",
-        "os-tmpdir": "1.0.2"
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
       }
     },
     "output-file-sync": {
@@ -11978,9 +11117,9 @@
       "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "mkdirp": "0.5.1",
-        "object-assign": "4.1.1"
+        "graceful-fs": "^4.1.4",
+        "mkdirp": "^0.5.1",
+        "object-assign": "^4.1.0"
       }
     },
     "p-defer": {
@@ -12007,7 +11146,7 @@
       "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
       "dev": true,
       "requires": {
-        "p-try": "1.0.0"
+        "p-try": "^1.0.0"
       }
     },
     "p-locate": {
@@ -12016,7 +11155,7 @@
       "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
       "dev": true,
       "requires": {
-        "p-limit": "1.3.0"
+        "p-limit": "^1.1.0"
       }
     },
     "p-try": {
@@ -12037,9 +11176,9 @@
       "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
       "dev": true,
       "requires": {
-        "cyclist": "0.2.2",
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6"
+        "cyclist": "~0.2.2",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
       },
       "dependencies": {
         "process-nextick-args": {
@@ -12050,17 +11189,17 @@
         },
         "readable-stream": {
           "version": "2.3.6",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
           "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
           "dev": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "string_decoder": {
@@ -12069,30 +11208,22 @@
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         }
       }
     },
-    "param-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz",
-      "integrity": "sha1-3LCRpDwlm5Io8cNB57akTqC/l0M=",
-      "requires": {
-        "sentence-case": "1.1.3"
-      }
-    },
     "parse-asn1": {
       "version": "5.1.1",
       "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
       "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
       "dev": true,
       "requires": {
-        "asn1.js": "4.10.1",
-        "browserify-aes": "1.2.0",
-        "create-hash": "1.2.0",
-        "evp_bytestokey": "1.0.3",
-        "pbkdf2": "3.0.17"
+        "asn1.js": "^4.0.0",
+        "browserify-aes": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3"
       }
     },
     "parse-entities": {
@@ -12101,12 +11232,12 @@
       "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==",
       "dev": true,
       "requires": {
-        "character-entities": "1.2.2",
-        "character-entities-legacy": "1.1.2",
-        "character-reference-invalid": "1.1.2",
-        "is-alphanumerical": "1.0.2",
-        "is-decimal": "1.0.2",
-        "is-hexadecimal": "1.0.2"
+        "character-entities": "^1.0.0",
+        "character-entities-legacy": "^1.0.0",
+        "character-reference-invalid": "^1.0.0",
+        "is-alphanumerical": "^1.0.0",
+        "is-decimal": "^1.0.0",
+        "is-hexadecimal": "^1.0.0"
       }
     },
     "parse-glob": {
@@ -12115,10 +11246,10 @@
       "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
       "dev": true,
       "requires": {
-        "glob-base": "0.3.0",
-        "is-dotfile": "1.0.3",
-        "is-extglob": "1.0.0",
-        "is-glob": "2.0.1"
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
       }
     },
     "parse-json": {
@@ -12127,7 +11258,7 @@
       "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
       "dev": true,
       "requires": {
-        "error-ex": "1.3.2"
+        "error-ex": "^1.2.0"
       }
     },
     "parse-key": {
@@ -12146,15 +11277,6 @@
       "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
       "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
     },
-    "pascal-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz",
-      "integrity": "sha1-Pl1kogBDgwp8STRMLXS0G+DJyZs=",
-      "requires": {
-        "camel-case": "1.2.2",
-        "upper-case-first": "1.1.2"
-      }
-    },
     "pascalcase": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
@@ -12167,14 +11289,6 @@
       "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
       "dev": true
     },
-    "path-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz",
-      "integrity": "sha1-UM5roNO+090LXCqcRVNpdDRAlRQ=",
-      "requires": {
-        "sentence-case": "1.1.3"
-      }
-    },
     "path-dirname": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
@@ -12190,7 +11304,8 @@
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
     },
     "path-is-inside": {
       "version": "1.0.2",
@@ -12231,12 +11346,12 @@
       "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
       "dev": true,
       "requires": {
-        "pify": "2.3.0"
+        "pify": "^2.0.0"
       },
       "dependencies": {
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         }
@@ -12248,11 +11363,11 @@
       "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
       "dev": true,
       "requires": {
-        "create-hash": "1.2.0",
-        "create-hmac": "1.1.7",
-        "ripemd160": "2.0.2",
-        "safe-buffer": "5.1.2",
-        "sha.js": "2.4.11"
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
     "performance-now": {
@@ -12278,7 +11393,7 @@
       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
       "dev": true,
       "requires": {
-        "pinkie": "2.0.4"
+        "pinkie": "^2.0.0"
       }
     },
     "pkg-dir": {
@@ -12287,7 +11402,7 @@
       "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
       "dev": true,
       "requires": {
-        "find-up": "2.1.0"
+        "find-up": "^2.1.0"
       }
     },
     "pkg-up": {
@@ -12296,7 +11411,7 @@
       "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
       "dev": true,
       "requires": {
-        "find-up": "2.1.0"
+        "find-up": "^2.1.0"
       }
     },
     "platform": {
@@ -12316,11 +11431,6 @@
       "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
       "dev": true
     },
-    "popper.js": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
-      "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA=="
-    },
     "posix-character-classes": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -12333,9 +11443,9 @@
       "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "source-map": "0.6.1",
-        "supports-color": "5.5.0"
+        "chalk": "^2.4.1",
+        "source-map": "^0.6.1",
+        "supports-color": "^5.4.0"
       },
       "dependencies": {
         "source-map": {
@@ -12348,13 +11458,13 @@
     },
     "postcss-calc": {
       "version": "5.3.1",
-      "resolved": "http://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
       "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-message-helpers": "2.0.0",
-        "reduce-css-calc": "1.3.0"
+        "postcss": "^5.0.2",
+        "postcss-message-helpers": "^2.0.0",
+        "reduce-css-calc": "^1.2.6"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12365,15 +11475,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12396,10 +11506,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12414,7 +11524,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -12425,9 +11535,9 @@
       "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
       "dev": true,
       "requires": {
-        "colormin": "1.1.2",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "colormin": "^1.0.5",
+        "postcss": "^5.0.13",
+        "postcss-value-parser": "^3.2.3"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12438,15 +11548,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12469,10 +11579,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12487,7 +11597,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -12498,8 +11608,8 @@
       "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^5.0.11",
+        "postcss-value-parser": "^3.1.2"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12510,15 +11620,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12541,10 +11651,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12559,18 +11669,18 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-discard-comments": {
       "version": "2.0.4",
-      "resolved": "http://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
       "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.14"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12581,15 +11691,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12612,10 +11722,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12630,7 +11740,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -12641,7 +11751,7 @@
       "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.4"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12652,15 +11762,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12683,10 +11793,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12701,18 +11811,18 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-discard-empty": {
       "version": "2.1.0",
-      "resolved": "http://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
       "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.14"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12723,15 +11833,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12754,10 +11864,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12772,18 +11882,18 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-discard-overridden": {
       "version": "0.1.1",
-      "resolved": "http://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
       "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.16"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12794,15 +11904,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12825,10 +11935,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12843,19 +11953,19 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-discard-unused": {
       "version": "2.2.3",
-      "resolved": "http://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
       "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "uniqs": "2.0.0"
+        "postcss": "^5.0.14",
+        "uniqs": "^2.0.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12866,15 +11976,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12897,10 +12007,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12915,7 +12025,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -12926,7 +12036,7 @@
       "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.4"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12937,15 +12047,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -12968,10 +12078,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -12986,7 +12096,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -12997,7 +12107,7 @@
       "integrity": "sha512-BIW982Kbf9/RikInNhNS3/GA6x/qY/+jhVS9KumqXZtU9ss8Yq15HhPJ6mnaXcU5bFq2ULxpOv96mHPAErpGMQ==",
       "dev": true,
       "requires": {
-        "htmlparser2": "3.10.0"
+        "htmlparser2": "^3.9.2"
       }
     },
     "postcss-jsx": {
@@ -13006,8 +12116,8 @@
       "integrity": "sha512-UJISlEGWH/LeMYudAwq9GeqfyPW9AeRq87GHOlbquxOIakKr0Aqu6l9Cx0Fg20f3A9bKJcX1NGX4/xzIs7PlZQ==",
       "dev": true,
       "requires": {
-        "@babel/core": "7.1.2",
-        "postcss-styled": "0.34.0"
+        "@babel/core": "^7.0.0",
+        "postcss-styled": ">=0.34.0"
       }
     },
     "postcss-less": {
@@ -13016,7 +12126,7 @@
       "integrity": "sha512-pPNsVnpCB13nBMOcl5GVh8JGmB0JGFjqkLUDzKdVpptFFKEe9wFdEzvh2j4lD2AD+7qcrUfw9Ta+oi5+Fw7jjQ==",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.2.16"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13031,11 +12141,11 @@
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13058,10 +12168,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13076,7 +12186,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -13087,8 +12197,8 @@
       "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==",
       "dev": true,
       "requires": {
-        "cosmiconfig": "4.0.0",
-        "import-cwd": "2.1.0"
+        "cosmiconfig": "^4.0.0",
+        "import-cwd": "^2.0.0"
       }
     },
     "postcss-loader": {
@@ -13097,10 +12207,10 @@
       "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "postcss": "6.0.23",
-        "postcss-load-config": "2.0.0",
-        "schema-utils": "0.4.7"
+        "loader-utils": "^1.1.0",
+        "postcss": "^6.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^0.4.0"
       }
     },
     "postcss-markdown": {
@@ -13109,8 +12219,8 @@
       "integrity": "sha512-cKPggF9OMOKPoqDm5YpYszCqMsImFh78FK6P8p6IsEKZB6IkUJYKz0/QgadYy4jLb60jcFIHJ6v6jsMH7/ZQrA==",
       "dev": true,
       "requires": {
-        "remark": "9.0.0",
-        "unist-util-find-all-after": "1.0.2"
+        "remark": "^9.0.0",
+        "unist-util-find-all-after": "^1.0.2"
       }
     },
     "postcss-media-query-parser": {
@@ -13121,13 +12231,13 @@
     },
     "postcss-merge-idents": {
       "version": "2.1.7",
-      "resolved": "http://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
       "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
       "dev": true,
       "requires": {
-        "has": "1.0.3",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "has": "^1.0.1",
+        "postcss": "^5.0.10",
+        "postcss-value-parser": "^3.1.1"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13138,15 +12248,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13169,10 +12279,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13187,7 +12297,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -13198,7 +12308,7 @@
       "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.4"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13209,15 +12319,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13240,10 +12350,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13258,7 +12368,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -13269,11 +12379,11 @@
       "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
       "dev": true,
       "requires": {
-        "browserslist": "1.7.7",
-        "caniuse-api": "1.6.1",
-        "postcss": "5.2.18",
-        "postcss-selector-parser": "2.2.3",
-        "vendors": "1.0.2"
+        "browserslist": "^1.5.2",
+        "caniuse-api": "^1.5.2",
+        "postcss": "^5.0.4",
+        "postcss-selector-parser": "^2.2.2",
+        "vendors": "^1.0.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13288,21 +12398,21 @@
           "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
           "dev": true,
           "requires": {
-            "caniuse-db": "1.0.30000899",
-            "electron-to-chromium": "1.3.82"
+            "caniuse-db": "^1.0.30000639",
+            "electron-to-chromium": "^1.2.7"
           }
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13325,10 +12435,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13343,7 +12453,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -13356,13 +12466,13 @@
     },
     "postcss-minify-font-values": {
       "version": "1.0.5",
-      "resolved": "http://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
       "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
       "dev": true,
       "requires": {
-        "object-assign": "4.1.1",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "object-assign": "^4.0.1",
+        "postcss": "^5.0.4",
+        "postcss-value-parser": "^3.0.2"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13373,15 +12483,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13404,10 +12514,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13422,19 +12532,19 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-minify-gradients": {
       "version": "1.0.5",
-      "resolved": "http://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
       "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^5.0.12",
+        "postcss-value-parser": "^3.3.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13445,15 +12555,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13476,10 +12586,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13494,21 +12604,21 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-minify-params": {
       "version": "1.2.2",
-      "resolved": "http://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
       "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
       "dev": true,
       "requires": {
-        "alphanum-sort": "1.0.2",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1",
-        "uniqs": "2.0.0"
+        "alphanum-sort": "^1.0.1",
+        "postcss": "^5.0.2",
+        "postcss-value-parser": "^3.0.2",
+        "uniqs": "^2.0.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13519,15 +12629,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13550,10 +12660,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13568,21 +12678,21 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-minify-selectors": {
       "version": "2.1.1",
-      "resolved": "http://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
       "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
       "dev": true,
       "requires": {
-        "alphanum-sort": "1.0.2",
-        "has": "1.0.3",
-        "postcss": "5.2.18",
-        "postcss-selector-parser": "2.2.3"
+        "alphanum-sort": "^1.0.2",
+        "has": "^1.0.1",
+        "postcss": "^5.0.14",
+        "postcss-selector-parser": "^2.0.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13593,15 +12703,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13624,10 +12734,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13642,7 +12752,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -13653,11 +12763,11 @@
       "integrity": "sha512-btTrbK+Xc3NBuYF8TPBjCMRSp5h6NoQ1iVZ6WiDQENIze6KIYCSf0+UFQuV3yJ7gRHA+4AAtF8i2jRvUpbBMMg==",
       "dev": true,
       "requires": {
-        "css-modules-loader-core": "1.1.0",
-        "generic-names": "1.0.3",
-        "lodash.camelcase": "4.3.0",
-        "postcss": "7.0.5",
-        "string-hash": "1.1.3"
+        "css-modules-loader-core": "^1.1.0",
+        "generic-names": "^1.0.3",
+        "lodash.camelcase": "^4.3.0",
+        "postcss": "^7.0.1",
+        "string-hash": "^1.1.1"
       },
       "dependencies": {
         "postcss": {
@@ -13666,9 +12776,9 @@
           "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.1",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.5.0"
           }
         },
         "source-map": {
@@ -13685,7 +12795,7 @@
       "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
       "dev": true,
       "requires": {
-        "postcss": "6.0.23"
+        "postcss": "^6.0.1"
       }
     },
     "postcss-modules-local-by-default": {
@@ -13694,8 +12804,8 @@
       "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
       "dev": true,
       "requires": {
-        "css-selector-tokenizer": "0.7.0",
-        "postcss": "6.0.23"
+        "css-selector-tokenizer": "^0.7.0",
+        "postcss": "^6.0.1"
       }
     },
     "postcss-modules-parser": {
@@ -13704,9 +12814,9 @@
       "integrity": "sha1-lfca15FvDzkge7gcQBM2yNJFc4w=",
       "dev": true,
       "requires": {
-        "icss-replace-symbols": "1.1.0",
-        "lodash.foreach": "3.0.3",
-        "postcss": "5.2.18"
+        "icss-replace-symbols": "^1.0.2",
+        "lodash.foreach": "^3.0.3",
+        "postcss": "^5.0.10"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13717,15 +12827,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13748,10 +12858,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13766,7 +12876,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -13777,14 +12887,14 @@
       "integrity": "sha1-OY0wALla6WlCDN9M2D+oBn8cXq4=",
       "dev": true,
       "requires": {
-        "css-selector-tokenizer": "0.7.0",
-        "icss-utils": "3.0.1",
-        "minimist": "1.2.0"
+        "css-selector-tokenizer": "^0.7.0",
+        "icss-utils": "^3.0.1",
+        "minimist": "^1.2.0"
       },
       "dependencies": {
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
           "dev": true
         }
@@ -13796,8 +12906,8 @@
       "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
       "dev": true,
       "requires": {
-        "css-selector-tokenizer": "0.7.0",
-        "postcss": "6.0.23"
+        "css-selector-tokenizer": "^0.7.0",
+        "postcss": "^6.0.1"
       }
     },
     "postcss-modules-values": {
@@ -13806,17 +12916,17 @@
       "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
       "dev": true,
       "requires": {
-        "icss-replace-symbols": "1.1.0",
-        "postcss": "6.0.23"
+        "icss-replace-symbols": "^1.1.0",
+        "postcss": "^6.0.1"
       }
     },
     "postcss-normalize-charset": {
       "version": "1.1.1",
-      "resolved": "http://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
       "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.5"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13827,15 +12937,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13858,10 +12968,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13876,21 +12986,21 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-normalize-url": {
       "version": "3.0.8",
-      "resolved": "http://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
       "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
       "dev": true,
       "requires": {
-        "is-absolute-url": "2.1.0",
-        "normalize-url": "1.9.1",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "is-absolute-url": "^2.0.0",
+        "normalize-url": "^1.4.0",
+        "postcss": "^5.0.14",
+        "postcss-value-parser": "^3.2.3"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13901,15 +13011,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -13932,10 +13042,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -13950,7 +13060,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -13961,8 +13071,8 @@
       "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^5.0.4",
+        "postcss-value-parser": "^3.0.1"
       },
       "dependencies": {
         "ansi-styles": {
@@ -13973,15 +13083,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -14004,10 +13114,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -14022,19 +13132,19 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-reduce-idents": {
       "version": "2.4.0",
-      "resolved": "http://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
       "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "postcss": "^5.0.4",
+        "postcss-value-parser": "^3.0.2"
       },
       "dependencies": {
         "ansi-styles": {
@@ -14045,15 +13155,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -14076,10 +13186,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -14094,18 +13204,18 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-reduce-initial": {
       "version": "1.0.1",
-      "resolved": "http://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
       "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
       "dev": true,
       "requires": {
-        "postcss": "5.2.18"
+        "postcss": "^5.0.4"
       },
       "dependencies": {
         "ansi-styles": {
@@ -14116,15 +13226,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -14147,10 +13257,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -14165,20 +13275,20 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
     },
     "postcss-reduce-transforms": {
       "version": "1.0.4",
-      "resolved": "http://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
       "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
       "dev": true,
       "requires": {
-        "has": "1.0.3",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1"
+        "has": "^1.0.1",
+        "postcss": "^5.0.8",
+        "postcss-value-parser": "^3.0.1"
       },
       "dependencies": {
         "ansi-styles": {
@@ -14189,15 +13299,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -14220,10 +13330,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -14238,7 +13348,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -14249,10 +13359,10 @@
       "integrity": "sha512-5xQXm1UPWuFObjbtyQzWvQaupru8yFcFi4HUlm6OPo1o2bUszYASuqRJ7bVArb3svGCdbYtqdMBKrqR1Aoy+tw==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "lodash": "4.17.11",
-        "log-symbols": "2.2.0",
-        "postcss": "7.0.5"
+        "chalk": "^2.0.1",
+        "lodash": "^4.17.4",
+        "log-symbols": "^2.0.0",
+        "postcss": "^7.0.2"
       },
       "dependencies": {
         "postcss": {
@@ -14261,9 +13371,9 @@
           "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.1",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.5.0"
           }
         },
         "source-map": {
@@ -14286,7 +13396,7 @@
       "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
       "dev": true,
       "requires": {
-        "postcss": "7.0.5"
+        "postcss": "^7.0.0"
       },
       "dependencies": {
         "postcss": {
@@ -14295,9 +13405,9 @@
           "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.1",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.5.0"
           }
         },
         "source-map": {
@@ -14314,8 +13424,8 @@
       "integrity": "sha512-uoRhfwZJHDRI8p2KQniTx4UwzYwKgQUhmFNJ7aysL3+tgFUfmv5TPX8UPnlE5gfrq6KHUUwPJ/nISFtzwxr7iQ==",
       "dev": true,
       "requires": {
-        "gonzales-pe": "4.2.3",
-        "postcss": "7.0.5"
+        "gonzales-pe": "^4.2.3",
+        "postcss": "^7.0.1"
       },
       "dependencies": {
         "postcss": {
@@ -14324,9 +13434,9 @@
           "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.1",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.5.0"
           }
         },
         "source-map": {
@@ -14343,7 +13453,7 @@
       "integrity": "sha512-4EFYGHcEw+H3E06PT/pQQri06u/1VIIPjeJQaM8skB80vZuXMhp4cSNV5azmdNkontnOID/XYWEvEEELLFB1ww==",
       "dev": true,
       "requires": {
-        "postcss": "6.0.23"
+        "postcss": "^6.0.23"
       }
     },
     "postcss-selector-parser": {
@@ -14352,9 +13462,9 @@
       "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
       "dev": true,
       "requires": {
-        "flatten": "1.0.2",
-        "indexes-of": "1.0.1",
-        "uniq": "1.0.1"
+        "flatten": "^1.0.2",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
       }
     },
     "postcss-styled": {
@@ -14365,14 +13475,14 @@
     },
     "postcss-svgo": {
       "version": "2.1.6",
-      "resolved": "http://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
       "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
       "dev": true,
       "requires": {
-        "is-svg": "2.1.0",
-        "postcss": "5.2.18",
-        "postcss-value-parser": "3.3.1",
-        "svgo": "0.7.2"
+        "is-svg": "^2.0.0",
+        "postcss": "^5.0.14",
+        "postcss-value-parser": "^3.2.3",
+        "svgo": "^0.7.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -14383,15 +13493,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -14414,10 +13524,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -14432,7 +13542,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -14445,13 +13555,13 @@
     },
     "postcss-unique-selectors": {
       "version": "2.0.2",
-      "resolved": "http://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
       "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
       "dev": true,
       "requires": {
-        "alphanum-sort": "1.0.2",
-        "postcss": "5.2.18",
-        "uniqs": "2.0.0"
+        "alphanum-sort": "^1.0.1",
+        "postcss": "^5.0.4",
+        "uniqs": "^2.0.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -14462,15 +13572,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -14493,10 +13603,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -14511,7 +13621,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -14524,13 +13634,13 @@
     },
     "postcss-zindex": {
       "version": "2.2.0",
-      "resolved": "http://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+      "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
       "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
       "dev": true,
       "requires": {
-        "has": "1.0.3",
-        "postcss": "5.2.18",
-        "uniqs": "2.0.0"
+        "has": "^1.0.1",
+        "postcss": "^5.0.4",
+        "uniqs": "^2.0.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -14541,15 +13651,15 @@
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           },
           "dependencies": {
             "supports-color": {
@@ -14572,10 +13682,10 @@
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "dev": true,
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.9",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           }
         },
         "source-map": {
@@ -14590,7 +13700,7 @@
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
-            "has-flag": "1.0.0"
+            "has-flag": "^1.0.0"
           }
         }
       }
@@ -14624,8 +13734,8 @@
       "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
       "dev": true,
       "requires": {
-        "ansi-regex": "3.0.0",
-        "ansi-styles": "3.2.1"
+        "ansi-regex": "^3.0.0",
+        "ansi-styles": "^3.2.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -14639,7 +13749,8 @@
     "private": {
       "version": "0.1.8",
       "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
-      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+      "dev": true
     },
     "process": {
       "version": "0.5.2",
@@ -14658,14 +13769,6 @@
       "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==",
       "dev": true
     },
-    "promise": {
-      "version": "7.3.1",
-      "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
-      "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
-      "requires": {
-        "asap": "2.0.6"
-      }
-    },
     "promise-inflight": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
@@ -14678,8 +13781,8 @@
       "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==",
       "dev": true,
       "requires": {
-        "kleur": "2.0.2",
-        "sisteransi": "0.1.1"
+        "kleur": "^2.0.1",
+        "sisteransi": "^0.1.1"
       }
     },
     "prop-types": {
@@ -14687,8 +13790,8 @@
       "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
       "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1"
+        "loose-envify": "^1.3.1",
+        "object-assign": "^4.1.1"
       }
     },
     "proxy-addr": {
@@ -14696,7 +13799,7 @@
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
       "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
       "requires": {
-        "forwarded": "0.1.2",
+        "forwarded": "~0.1.2",
         "ipaddr.js": "1.8.0"
       }
     },
@@ -14724,12 +13827,12 @@
       "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
       "dev": true,
       "requires": {
-        "bn.js": "4.11.8",
-        "browserify-rsa": "4.0.1",
-        "create-hash": "1.2.0",
-        "parse-asn1": "5.1.1",
-        "randombytes": "2.0.6",
-        "safe-buffer": "5.1.2"
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
     "pump": {
@@ -14738,8 +13841,8 @@
       "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.1",
-        "once": "1.4.0"
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
       }
     },
     "pumpify": {
@@ -14748,15 +13851,16 @@
       "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
       "dev": true,
       "requires": {
-        "duplexify": "3.6.1",
-        "inherits": "2.0.3",
-        "pump": "2.0.1"
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
       }
     },
     "punycode": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+      "dev": true
     },
     "pure-color": {
       "version": "1.3.0",
@@ -14766,21 +13870,14 @@
     "q": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
-      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+      "dev": true
     },
     "qs": {
       "version": "6.5.2",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
       "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
     },
-    "query-string": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz",
-      "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=",
-      "requires": {
-        "strict-uri-encode": "1.1.0"
-      }
-    },
     "querystring": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
@@ -14809,7 +13906,7 @@
       "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz",
       "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==",
       "requires": {
-        "performance-now": "2.1.0"
+        "performance-now": "^2.1.0"
       }
     },
     "randomatic": {
@@ -14818,9 +13915,9 @@
       "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
       "dev": true,
       "requires": {
-        "is-number": "4.0.0",
-        "kind-of": "6.0.2",
-        "math-random": "1.0.1"
+        "is-number": "^4.0.0",
+        "kind-of": "^6.0.0",
+        "math-random": "^1.0.1"
       },
       "dependencies": {
         "is-number": {
@@ -14843,7 +13940,7 @@
       "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "^5.1.0"
       }
     },
     "randomfill": {
@@ -14852,8 +13949,8 @@
       "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
       "dev": true,
       "requires": {
-        "randombytes": "2.0.6",
-        "safe-buffer": "5.1.2"
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
       }
     },
     "range-parser": {
@@ -14877,90 +13974,42 @@
           "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
           "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
           "requires": {
-            "safer-buffer": "2.1.2"
+            "safer-buffer": ">= 2.1.2 < 3"
           }
         }
       }
     },
-    "react": {
-      "version": "16.6.0",
-      "resolved": "https://registry.npmjs.org/react/-/react-16.6.0.tgz",
-      "integrity": "sha512-zJPnx/jKtuOEXCbQ9BKaxDMxR0001/hzxXwYxG8septeyYGfsgAei6NgfbVgOhbY1WOP2o3VPs/E9HaN+9hV3Q==",
-      "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1",
-        "prop-types": "15.6.2",
-        "scheduler": "0.10.0"
-      }
-    },
-    "react-addons-pure-render-mixin": {
-      "version": "15.6.2",
-      "resolved": "https://registry.npmjs.org/react-addons-pure-render-mixin/-/react-addons-pure-render-mixin-15.6.2.tgz",
-      "integrity": "sha1-a4P0C2s27kBzXL1hJes/E84c3ck=",
-      "requires": {
-        "fbjs": "0.8.17",
-        "object-assign": "4.1.1"
-      },
-      "dependencies": {
-        "core-js": {
-          "version": "1.2.7",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
-          "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
-        },
-        "fbjs": {
-          "version": "0.8.17",
-          "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
-          "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
-          "requires": {
-            "core-js": "1.2.7",
-            "isomorphic-fetch": "2.2.1",
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "promise": "7.3.1",
-            "setimmediate": "1.0.5",
-            "ua-parser-js": "0.7.19"
-          }
-        }
-      }
-    },
-    "react-addons-update": {
-      "version": "15.6.2",
-      "resolved": "https://registry.npmjs.org/react-addons-update/-/react-addons-update-15.6.2.tgz",
-      "integrity": "sha1-5TdTxbNIh5dFEMiC1/sHWFHV5QQ=",
+    "rc": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "dev": true,
+      "optional": true,
       "requires": {
-        "fbjs": "0.8.17",
-        "object-assign": "4.1.1"
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
       },
       "dependencies": {
-        "core-js": {
-          "version": "1.2.7",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
-          "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
-        },
-        "fbjs": {
-          "version": "0.8.17",
-          "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
-          "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
-          "requires": {
-            "core-js": "1.2.7",
-            "isomorphic-fetch": "2.2.1",
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "promise": "7.3.1",
-            "setimmediate": "1.0.5",
-            "ua-parser-js": "0.7.19"
-          }
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true,
+          "optional": true
         }
       }
     },
-    "react-avatar": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/react-avatar/-/react-avatar-2.5.1.tgz",
-      "integrity": "sha512-bwH5pWY6uxaKZt+IZBfD+SU3Dpy3FaKbmAzrOI4N8SATUPLXOdGaJHWUl6Vl8hHSwWSsoLh/m7xYHdnn0lofZw==",
+    "react": {
+      "version": "16.6.0",
+      "resolved": "https://registry.npmjs.org/react/-/react-16.6.0.tgz",
+      "integrity": "sha512-zJPnx/jKtuOEXCbQ9BKaxDMxR0001/hzxXwYxG8septeyYGfsgAei6NgfbVgOhbY1WOP2o3VPs/E9HaN+9hV3Q==",
       "requires": {
-        "babel-runtime": "6.6.1",
-        "is-retina": "1.0.3",
-        "md5": "2.2.1"
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "scheduler": "^0.10.0"
       }
     },
     "react-base16-styling": {
@@ -14968,10 +14017,10 @@
       "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.5.3.tgz",
       "integrity": "sha1-OFjyTpxN2MvT9wLz901YHKKRcmk=",
       "requires": {
-        "base16": "1.0.0",
-        "lodash.curry": "4.1.1",
-        "lodash.flow": "3.5.0",
-        "pure-color": "1.3.0"
+        "base16": "^1.0.0",
+        "lodash.curry": "^4.0.1",
+        "lodash.flow": "^3.3.0",
+        "pure-color": "^1.2.0"
       }
     },
     "react-css-super-themr": {
@@ -14979,8 +14028,8 @@
       "resolved": "https://registry.npmjs.org/react-css-super-themr/-/react-css-super-themr-2.2.0.tgz",
       "integrity": "sha512-fcSRGHVhYEBU8zx530RViXd7rjosirUjv0PFXimKNHRsoGuhnu1wb0lYDJ1xwhUfehJ/rr3O60+H3jRFP78KaQ==",
       "requires": {
-        "hoist-non-react-statics": "1.2.0",
-        "invariant": "2.2.4"
+        "hoist-non-react-statics": "^1.2.0",
+        "invariant": "^2.2.1"
       },
       "dependencies": {
         "hoist-non-react-statics": {
@@ -14990,31 +14039,13 @@
         }
       }
     },
-    "react-datetime": {
-      "version": "2.16.3",
-      "resolved": "https://registry.npmjs.org/react-datetime/-/react-datetime-2.16.3.tgz",
-      "integrity": "sha512-amWfb5iGEiyqjLmqCLlPpu2oN415jK8wX1qoTq7qn6EYiU7qQgbNHglww014PT4O/3G5eo/3kbJu/M/IxxTyGw==",
-      "requires": {
-        "create-react-class": "15.6.3",
-        "object-assign": "3.0.0",
-        "prop-types": "15.6.2",
-        "react-onclickoutside": "6.8.0"
-      },
-      "dependencies": {
-        "object-assign": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
-          "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I="
-        }
-      }
-    },
     "react-dock": {
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/react-dock/-/react-dock-0.2.4.tgz",
       "integrity": "sha1-5yfcdVCztzEWY13LnA4E0Lev4Xw=",
       "requires": {
-        "lodash.debounce": "3.1.1",
-        "prop-types": "15.6.2"
+        "lodash.debounce": "^3.1.1",
+        "prop-types": "^15.5.8"
       }
     },
     "react-dom": {
@@ -15022,19 +14053,10 @@
       "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.0.tgz",
       "integrity": "sha512-Stm2D9dXEUUAQdvpvhvFj/DEXwC2PAL/RwEMhoN4dvvD2ikTlJegEXf97xryg88VIAU22ZAP7n842l+9BTz6+w==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1",
-        "prop-types": "15.6.2",
-        "scheduler": "0.10.0"
-      }
-    },
-    "react-dropzone": {
-      "version": "3.13.4",
-      "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-3.13.4.tgz",
-      "integrity": "sha1-hNomgVxAM5aRxJtFRMLvehaRLMw=",
-      "requires": {
-        "attr-accept": "1.1.3",
-        "prop-types": "15.6.2"
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "scheduler": "^0.10.0"
       }
     },
     "react-helmet": {
@@ -15042,10 +14064,10 @@
       "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-5.2.0.tgz",
       "integrity": "sha1-qBgR3yExOm1VxfBYxK66XW89l6c=",
       "requires": {
-        "deep-equal": "1.0.1",
-        "object-assign": "4.1.1",
-        "prop-types": "15.6.2",
-        "react-side-effect": "1.1.5"
+        "deep-equal": "^1.0.1",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.5.4",
+        "react-side-effect": "^1.1.0"
       }
     },
     "react-hot-loader": {
@@ -15054,19 +14076,14 @@
       "integrity": "sha512-T0G5jURyTsFLoiW6MTr5Q35UHC/B2pmYJ7+VBjk8yMDCEABRmCGy4g6QwxoB4pWg4/xYvVTa/Pbqnsgx/+NLuA==",
       "dev": true,
       "requires": {
-        "fast-levenshtein": "2.0.6",
-        "global": "4.3.2",
-        "hoist-non-react-statics": "2.5.5",
-        "prop-types": "15.6.2",
-        "react-lifecycles-compat": "3.0.4",
-        "shallowequal": "1.1.0"
+        "fast-levenshtein": "^2.0.6",
+        "global": "^4.3.0",
+        "hoist-non-react-statics": "^2.5.0",
+        "prop-types": "^15.6.1",
+        "react-lifecycles-compat": "^3.0.4",
+        "shallowequal": "^1.0.2"
       }
     },
-    "react-input-autosize": {
-      "version": "0.6.13",
-      "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-0.6.13.tgz",
-      "integrity": "sha1-OG/3qdLD3AFsJlvy5Z05cFD2Wvc="
-    },
     "react-is": {
       "version": "16.6.0",
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.6.0.tgz",
@@ -15078,37 +14095,16 @@
       "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.11.0.tgz",
       "integrity": "sha1-9bF+gzKanHauOL5cBP2jp/1oSjU=",
       "requires": {
-        "babel-runtime": "6.6.1",
-        "prop-types": "15.6.2",
-        "react-base16-styling": "0.5.3"
-      }
-    },
-    "react-lazy-cache": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/react-lazy-cache/-/react-lazy-cache-3.0.1.tgz",
-      "integrity": "sha1-DcZNON8XZ+93Z4xclBkAZMsRsM0=",
-      "requires": {
-        "deep-equal": "1.0.1"
+        "babel-runtime": "^6.6.1",
+        "prop-types": "^15.5.8",
+        "react-base16-styling": "^0.5.1"
       }
     },
     "react-lifecycles-compat": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
-      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
-    },
-    "react-onclickoutside": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.8.0.tgz",
-      "integrity": "sha512-5Q4Rn7QLEoh7WIe66KFvYIpWJ49GeHoygP1/EtJyZjXKgrWH19Tf0Ty3lWyQzrEEDyLOwUvvmBFSE3dcDdvagA=="
-    },
-    "react-popper": {
-      "version": "0.7.5",
-      "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.7.5.tgz",
-      "integrity": "sha512-ya9dhhGCf74JTOB2uyksEHhIGw7w9tNZRUJF73lEq2h4H5JT6MBa4PdT4G+sx6fZwq+xKZAL/sVNAIuojPn7Dg==",
-      "requires": {
-        "popper.js": "1.15.0",
-        "prop-types": "15.6.2"
-      }
+      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==",
+      "dev": true
     },
     "react-pure-render": {
       "version": "1.0.2",
@@ -15120,12 +14116,12 @@
       "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-6.0.1.tgz",
       "integrity": "sha512-T52I52Kxhbqy/6TEfBv85rQSDz6+Y28V/pf52vDWs1YRXG19mcFOGfHnY2HsNFHyhP+ST34Aih98fvt6tqwVcQ==",
       "requires": {
-        "@babel/runtime": "7.4.2",
-        "hoist-non-react-statics": "3.3.0",
-        "invariant": "2.2.4",
-        "loose-envify": "1.4.0",
-        "prop-types": "15.7.2",
-        "react-is": "16.8.6"
+        "@babel/runtime": "^7.3.1",
+        "hoist-non-react-statics": "^3.3.0",
+        "invariant": "^2.2.4",
+        "loose-envify": "^1.4.0",
+        "prop-types": "^15.7.2",
+        "react-is": "^16.8.2"
       },
       "dependencies": {
         "hoist-non-react-statics": {
@@ -15133,7 +14129,7 @@
           "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
           "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
           "requires": {
-            "react-is": "16.8.6"
+            "react-is": "^16.7.0"
           }
         },
         "prop-types": {
@@ -15141,9 +14137,9 @@
           "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
           "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
           "requires": {
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "react-is": "16.8.6"
+            "loose-envify": "^1.4.0",
+            "object-assign": "^4.1.1",
+            "react-is": "^16.8.1"
           }
         },
         "react-is": {
@@ -15153,26 +14149,17 @@
         }
       }
     },
-    "react-router": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/react-router/-/react-router-1.0.3.tgz",
-      "integrity": "sha1-mA7KoFW4bkfIZUjCMq4FqIpB8Lc=",
-      "requires": {
-        "invariant": "2.2.4",
-        "warning": "2.1.0"
-      }
-    },
     "react-router-dom": {
       "version": "4.3.1",
       "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz",
       "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==",
       "requires": {
-        "history": "4.7.2",
-        "invariant": "2.2.4",
-        "loose-envify": "1.4.0",
-        "prop-types": "15.6.2",
-        "react-router": "4.3.1",
-        "warning": "4.0.2"
+        "history": "^4.7.2",
+        "invariant": "^2.2.4",
+        "loose-envify": "^1.3.1",
+        "prop-types": "^15.6.1",
+        "react-router": "^4.3.1",
+        "warning": "^4.0.1"
       },
       "dependencies": {
         "history": {
@@ -15180,11 +14167,11 @@
           "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz",
           "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==",
           "requires": {
-            "invariant": "2.2.4",
-            "loose-envify": "1.4.0",
-            "resolve-pathname": "2.2.0",
-            "value-equal": "0.4.0",
-            "warning": "3.0.0"
+            "invariant": "^2.2.1",
+            "loose-envify": "^1.2.0",
+            "resolve-pathname": "^2.2.0",
+            "value-equal": "^0.4.0",
+            "warning": "^3.0.0"
           },
           "dependencies": {
             "warning": {
@@ -15192,7 +14179,7 @@
               "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
               "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
               "requires": {
-                "loose-envify": "1.4.0"
+                "loose-envify": "^1.0.0"
               }
             }
           }
@@ -15202,13 +14189,13 @@
           "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz",
           "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==",
           "requires": {
-            "history": "4.7.2",
-            "hoist-non-react-statics": "2.5.5",
-            "invariant": "2.2.4",
-            "loose-envify": "1.4.0",
-            "path-to-regexp": "1.7.0",
-            "prop-types": "15.6.2",
-            "warning": "4.0.2"
+            "history": "^4.7.2",
+            "hoist-non-react-statics": "^2.5.0",
+            "invariant": "^2.2.4",
+            "loose-envify": "^1.3.1",
+            "path-to-regexp": "^1.7.0",
+            "prop-types": "^15.6.1",
+            "warning": "^4.0.1"
           }
         },
         "warning": {
@@ -15216,63 +14203,30 @@
           "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz",
           "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==",
           "requires": {
-            "loose-envify": "1.4.0"
+            "loose-envify": "^1.0.0"
           }
         }
       }
     },
-    "react-select": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/react-select/-/react-select-0.9.1.tgz",
-      "integrity": "sha1-4yKi0KBjlqSCBrBVPfXsR9Fgg7o=",
-      "requires": {
-        "classnames": "2.2.6",
-        "react-input-autosize": "0.6.13"
-      }
-    },
     "react-side-effect": {
       "version": "1.1.5",
       "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.1.5.tgz",
       "integrity": "sha512-Z2ZJE4p/jIfvUpiUMRydEVpQRf2f8GMHczT6qLcARmX7QRb28JDBTpnM2g/i5y/p7ZDEXYGHWg0RbhikE+hJRw==",
       "requires": {
-        "exenv": "1.2.2",
-        "shallowequal": "1.1.0"
+        "exenv": "^1.2.1",
+        "shallowequal": "^1.0.1"
       }
     },
-    "react-switch-button": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/react-switch-button/-/react-switch-button-1.1.2.tgz",
-      "integrity": "sha1-jOhPaUa046k3PnttasjngNl/L08="
-    },
     "react-test-renderer": {
       "version": "16.6.0",
       "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.6.0.tgz",
       "integrity": "sha512-w+Y3YT7OX1LP5KO7HCd0YR34Ol1qmISHaooPNMRYa6QzmwtcWhEGuZPr34wO8UCBIokswuhyLQUq7rjPDcEtJA==",
       "dev": true,
       "requires": {
-        "object-assign": "4.1.1",
-        "prop-types": "15.6.2",
-        "react-is": "16.6.0",
-        "scheduler": "0.10.0"
-      }
-    },
-    "react-textarea-autosize": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-5.2.1.tgz",
-      "integrity": "sha512-bx6z2I35aapr71ggw2yZIA4qhmqeTa4ZVsSaTeFvtf9kfcZppDBh2PbMt8lvbdmzEk7qbSFhAxR9vxEVm6oiMg==",
-      "requires": {
-        "prop-types": "15.6.2"
-      }
-    },
-    "react-transition-group": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
-      "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
-      "requires": {
-        "dom-helpers": "3.4.0",
-        "loose-envify": "1.4.0",
-        "prop-types": "15.6.2",
-        "react-lifecycles-compat": "3.0.4"
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "react-is": "^16.6.0",
+        "scheduler": "^0.10.0"
       }
     },
     "read-pkg": {
@@ -15281,9 +14235,9 @@
       "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
       "dev": true,
       "requires": {
-        "load-json-file": "2.0.0",
-        "normalize-package-data": "2.4.0",
-        "path-type": "2.0.0"
+        "load-json-file": "^2.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^2.0.0"
       }
     },
     "read-pkg-up": {
@@ -15292,21 +14246,21 @@
       "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
       "dev": true,
       "requires": {
-        "find-up": "2.1.0",
-        "read-pkg": "2.0.0"
+        "find-up": "^2.0.0",
+        "read-pkg": "^2.0.0"
       }
     },
     "readable-stream": {
       "version": "2.0.6",
-      "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
       "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
       "requires": {
-        "core-util-is": "1.0.2",
-        "inherits": "2.0.3",
-        "isarray": "1.0.0",
-        "process-nextick-args": "1.0.7",
-        "string_decoder": "0.10.31",
-        "util-deprecate": "1.0.2"
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~1.0.6",
+        "string_decoder": "~0.10.x",
+        "util-deprecate": "~1.0.1"
       }
     },
     "readdirp": {
@@ -15315,9 +14269,9 @@
       "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "micromatch": "3.1.10",
-        "readable-stream": "2.0.6"
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
       },
       "dependencies": {
         "arr-diff": {
@@ -15338,16 +14292,16 @@
           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
           "dev": true,
           "requires": {
-            "arr-flatten": "1.1.0",
-            "array-unique": "0.3.2",
-            "extend-shallow": "2.0.1",
-            "fill-range": "4.0.0",
-            "isobject": "3.0.1",
-            "repeat-element": "1.1.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "extend-shallow": {
@@ -15356,7 +14310,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -15376,13 +14330,13 @@
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -15391,7 +14345,7 @@
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
@@ -15400,7 +14354,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
@@ -15409,7 +14363,7 @@
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -15418,7 +14372,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -15429,7 +14383,7 @@
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -15438,7 +14392,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -15449,9 +14403,9 @@
               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
@@ -15468,14 +14422,14 @@
           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
           "dev": true,
           "requires": {
-            "array-unique": "0.3.2",
-            "define-property": "1.0.0",
-            "expand-brackets": "2.1.4",
-            "extend-shallow": "2.0.1",
-            "fragment-cache": "0.2.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -15484,7 +14438,7 @@
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
@@ -15493,7 +14447,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -15504,10 +14458,10 @@
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
@@ -15516,7 +14470,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -15527,7 +14481,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -15536,7 +14490,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -15545,9 +14499,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-number": {
@@ -15556,7 +14510,7 @@
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
@@ -15565,7 +14519,7 @@
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
@@ -15588,19 +14542,19 @@
           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "define-property": "2.0.2",
-            "extend-shallow": "3.0.2",
-            "extglob": "2.0.4",
-            "fragment-cache": "0.2.1",
-            "kind-of": "6.0.2",
-            "nanomatch": "1.2.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         },
         "ms": {
@@ -15617,30 +14571,7 @@
       "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==",
       "dev": true,
       "requires": {
-        "util.promisify": "1.0.0"
-      }
-    },
-    "recast": {
-      "version": "0.11.23",
-      "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
-      "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
-      "requires": {
-        "ast-types": "0.9.6",
-        "esprima": "3.1.3",
-        "private": "0.1.8",
-        "source-map": "0.5.7"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        }
+        "util.promisify": "^1.0.0"
       }
     },
     "reconnect-core": {
@@ -15648,7 +14579,7 @@
       "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz",
       "integrity": "sha1-+65SkZp4d9hE4yRtAaLyZwHIM8g=",
       "requires": {
-        "backoff": "2.5.0"
+        "backoff": "~2.5.0"
       }
     },
     "redent": {
@@ -15657,19 +14588,19 @@
       "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
       "dev": true,
       "requires": {
-        "indent-string": "2.1.0",
-        "strip-indent": "1.0.1"
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
       }
     },
     "reduce-css-calc": {
       "version": "1.3.0",
-      "resolved": "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
       "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
       "dev": true,
       "requires": {
-        "balanced-match": "0.4.2",
-        "math-expression-evaluator": "1.2.17",
-        "reduce-function-call": "1.0.2"
+        "balanced-match": "^0.4.2",
+        "math-expression-evaluator": "^1.2.14",
+        "reduce-function-call": "^1.0.1"
       },
       "dependencies": {
         "balanced-match": {
@@ -15686,7 +14617,7 @@
       "integrity": "sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU=",
       "dev": true,
       "requires": {
-        "test-value": "1.1.0"
+        "test-value": "^1.0.1"
       },
       "dependencies": {
         "array-back": {
@@ -15695,7 +14626,7 @@
           "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
           "dev": true,
           "requires": {
-            "typical": "2.6.1"
+            "typical": "^2.6.0"
           }
         },
         "test-value": {
@@ -15704,8 +14635,8 @@
           "integrity": "sha1-oJE29y7AQ9J8iTcHwrFZv6196T8=",
           "dev": true,
           "requires": {
-            "array-back": "1.0.4",
-            "typical": "2.6.1"
+            "array-back": "^1.0.2",
+            "typical": "^2.4.2"
           }
         }
       }
@@ -15721,7 +14652,7 @@
       "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
       "dev": true,
       "requires": {
-        "balanced-match": "0.4.2"
+        "balanced-match": "^0.4.2"
       },
       "dependencies": {
         "balanced-match": {
@@ -15749,7 +14680,7 @@
       "integrity": "sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw=",
       "dev": true,
       "requires": {
-        "test-value": "2.1.0"
+        "test-value": "^2.0.0"
       },
       "dependencies": {
         "array-back": {
@@ -15758,7 +14689,7 @@
           "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
           "dev": true,
           "requires": {
-            "typical": "2.6.1"
+            "typical": "^2.6.0"
           }
         },
         "test-value": {
@@ -15767,8 +14698,8 @@
           "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
           "dev": true,
           "requires": {
-            "array-back": "1.0.4",
-            "typical": "2.6.1"
+            "array-back": "^1.0.3",
+            "typical": "^2.6.0"
           }
         }
       }
@@ -15778,10 +14709,10 @@
       "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
       "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
       "requires": {
-        "lodash": "4.17.11",
-        "lodash-es": "4.17.11",
-        "loose-envify": "1.4.0",
-        "symbol-observable": "1.2.0"
+        "lodash": "^4.2.1",
+        "lodash-es": "^4.2.1",
+        "loose-envify": "^1.1.0",
+        "symbol-observable": "^1.0.3"
       }
     },
     "redux-actions": {
@@ -15789,11 +14720,11 @@
       "resolved": "https://registry.npmjs.org/redux-actions/-/redux-actions-2.6.3.tgz",
       "integrity": "sha512-F1Po7TrtJm53RoLmH38c0LXN0yU2Yc/ReXDUJk9CqzP/SlJ/DlKZhwYxo9ngFb5k6eSQgvBydBV6W8BIgjFQZQ==",
       "requires": {
-        "invariant": "2.2.4",
-        "just-curry-it": "3.1.0",
-        "loose-envify": "1.4.0",
-        "reduce-reducers": "0.4.3",
-        "to-camel-case": "1.0.0"
+        "invariant": "^2.2.4",
+        "just-curry-it": "^3.1.0",
+        "loose-envify": "^1.4.0",
+        "reduce-reducers": "^0.4.3",
+        "to-camel-case": "^1.0.0"
       }
     },
     "redux-devtools": {
@@ -15801,9 +14732,9 @@
       "resolved": "https://registry.npmjs.org/redux-devtools/-/redux-devtools-3.4.1.tgz",
       "integrity": "sha1-CdNCzgq2CHvmeelTodfFMO+hE44=",
       "requires": {
-        "lodash": "4.17.11",
-        "prop-types": "15.6.2",
-        "redux-devtools-instrument": "1.9.0"
+        "lodash": "^4.2.0",
+        "prop-types": "^15.5.7",
+        "redux-devtools-instrument": "^1.0.1"
       }
     },
     "redux-devtools-dock-monitor": {
@@ -15811,11 +14742,11 @@
       "resolved": "https://registry.npmjs.org/redux-devtools-dock-monitor/-/redux-devtools-dock-monitor-1.1.3.tgz",
       "integrity": "sha512-yAXzoI0lpjv19CxVuw8RECeFWUVdyzayqnkX8ePZyeXV2ZgIk4T+rKx82Wk+REP1y3rl8o1/oFDq4B7EobOqMg==",
       "requires": {
-        "babel-runtime": "6.6.1",
-        "parse-key": "0.2.1",
-        "prop-types": "15.6.2",
-        "react-dock": "0.2.4",
-        "react-pure-render": "1.0.2"
+        "babel-runtime": "^6.2.0",
+        "parse-key": "^0.2.1",
+        "prop-types": "^15.5.8",
+        "react-dock": "^0.2.4",
+        "react-pure-render": "^1.0.2"
       }
     },
     "redux-devtools-instrument": {
@@ -15823,8 +14754,8 @@
       "resolved": "https://registry.npmjs.org/redux-devtools-instrument/-/redux-devtools-instrument-1.9.0.tgz",
       "integrity": "sha512-pLFQoja1ojpsSRTWbC9yyc/a+z8uwOD7FPKLp+Abs7qjsah6khA5o8HBE2wa0VipE5vniYINdkNyxV/2iWADKg==",
       "requires": {
-        "lodash": "4.17.11",
-        "symbol-observable": "1.2.0"
+        "lodash": "^4.2.0",
+        "symbol-observable": "^1.0.2"
       }
     },
     "redux-devtools-log-monitor": {
@@ -15832,11 +14763,11 @@
       "resolved": "https://registry.npmjs.org/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.4.0.tgz",
       "integrity": "sha1-cWuVgO2iozHNNZo2qgnjoWAqhUs=",
       "requires": {
-        "lodash.debounce": "4.0.8",
-        "prop-types": "15.6.2",
-        "react-json-tree": "0.11.0",
-        "react-pure-render": "1.0.2",
-        "redux-devtools-themes": "1.0.0"
+        "lodash.debounce": "^4.0.4",
+        "prop-types": "^15.0.0",
+        "react-json-tree": "^0.11.0",
+        "react-pure-render": "^1.0.2",
+        "redux-devtools-themes": "^1.0.0"
       },
       "dependencies": {
         "lodash.debounce": {
@@ -15851,33 +14782,7 @@
       "resolved": "https://registry.npmjs.org/redux-devtools-themes/-/redux-devtools-themes-1.0.0.tgz",
       "integrity": "sha1-xILc48U3OXYEX0ATSQfZ3LOuPV0=",
       "requires": {
-        "base16": "1.0.0"
-      }
-    },
-    "redux-form": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-4.2.2.tgz",
-      "integrity": "sha1-uK43pAcJBvRdvTCwcinxoQvyXLA=",
-      "requires": {
-        "deep-equal": "1.0.1",
-        "hoist-non-react-statics": "1.2.0",
-        "is-promise": "2.1.0",
-        "react-lazy-cache": "3.0.1"
-      },
-      "dependencies": {
-        "hoist-non-react-statics": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz",
-          "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
-        }
-      }
-    },
-    "redux-logger": {
-      "version": "2.10.2",
-      "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-2.10.2.tgz",
-      "integrity": "sha1-PFpfCm8yV3wd6t9mVfJX+CxsOTc=",
-      "requires": {
-        "deep-diff": "0.3.4"
+        "base16": "^1.0.0"
       }
     },
     "redux-promise": {
@@ -15885,23 +14790,10 @@
       "resolved": "https://registry.npmjs.org/redux-promise/-/redux-promise-0.6.0.tgz",
       "integrity": "sha512-R2mGxJbPFgXyCNbFDE6LjTZhCEuACF54g1bxld3nqBhnRMX0OsUyWk77moF7UMGkUdl5WOAwc4BC5jOd1dunqQ==",
       "requires": {
-        "flux-standard-action": "2.0.3",
-        "is-promise": "2.1.0"
-      }
-    },
-    "redux-router": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/redux-router/-/redux-router-1.0.0.tgz",
-      "integrity": "sha1-PBZ240Qb7FD+jZJFfAF8tjaZM08=",
-      "requires": {
-        "deep-equal": "1.0.1"
+        "flux-standard-action": "^2.0.3",
+        "is-promise": "^2.1.0"
       }
     },
-    "redux-thunk": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
-      "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
-    },
     "referrer-policy": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz",
@@ -15924,9 +14816,9 @@
       "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babel-types": "6.26.0",
-        "private": "0.1.8"
+        "babel-runtime": "^6.18.0",
+        "babel-types": "^6.19.0",
+        "private": "^0.1.6"
       },
       "dependencies": {
         "babel-runtime": {
@@ -15935,8 +14827,8 @@
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "dev": true,
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         }
       }
@@ -15947,7 +14839,7 @@
       "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
       "dev": true,
       "requires": {
-        "is-equal-shallow": "0.1.3"
+        "is-equal-shallow": "^0.1.3"
       }
     },
     "regex-not": {
@@ -15956,8 +14848,8 @@
       "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
       "dev": true,
       "requires": {
-        "extend-shallow": "3.0.2",
-        "safe-regex": "1.1.0"
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
       }
     },
     "regex-parser": {
@@ -15968,7 +14860,7 @@
     },
     "regexpp": {
       "version": "1.1.0",
-      "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
       "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
       "dev": true
     },
@@ -15978,9 +14870,9 @@
       "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
       "dev": true,
       "requires": {
-        "regenerate": "1.4.0",
-        "regjsgen": "0.2.0",
-        "regjsparser": "0.1.5"
+        "regenerate": "^1.2.1",
+        "regjsgen": "^0.2.0",
+        "regjsparser": "^0.1.4"
       }
     },
     "regjsgen": {
@@ -15995,7 +14887,7 @@
       "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
       "dev": true,
       "requires": {
-        "jsesc": "0.5.0"
+        "jsesc": "~0.5.0"
       },
       "dependencies": {
         "jsesc": {
@@ -16006,20 +14898,15 @@
         }
       }
     },
-    "relateurl": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
-      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
-    },
     "remark": {
       "version": "9.0.0",
       "resolved": "https://registry.npmjs.org/remark/-/remark-9.0.0.tgz",
       "integrity": "sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A==",
       "dev": true,
       "requires": {
-        "remark-parse": "5.0.0",
-        "remark-stringify": "5.0.0",
-        "unified": "6.2.0"
+        "remark-parse": "^5.0.0",
+        "remark-stringify": "^5.0.0",
+        "unified": "^6.0.0"
       }
     },
     "remark-parse": {
@@ -16028,21 +14915,21 @@
       "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==",
       "dev": true,
       "requires": {
-        "collapse-white-space": "1.0.4",
-        "is-alphabetical": "1.0.2",
-        "is-decimal": "1.0.2",
-        "is-whitespace-character": "1.0.2",
-        "is-word-character": "1.0.2",
-        "markdown-escapes": "1.0.2",
-        "parse-entities": "1.2.0",
-        "repeat-string": "1.6.1",
-        "state-toggle": "1.0.1",
+        "collapse-white-space": "^1.0.2",
+        "is-alphabetical": "^1.0.0",
+        "is-decimal": "^1.0.0",
+        "is-whitespace-character": "^1.0.0",
+        "is-word-character": "^1.0.0",
+        "markdown-escapes": "^1.0.0",
+        "parse-entities": "^1.1.0",
+        "repeat-string": "^1.5.4",
+        "state-toggle": "^1.0.0",
         "trim": "0.0.1",
-        "trim-trailing-lines": "1.1.1",
-        "unherit": "1.1.1",
-        "unist-util-remove-position": "1.1.2",
-        "vfile-location": "2.0.3",
-        "xtend": "4.0.1"
+        "trim-trailing-lines": "^1.0.0",
+        "unherit": "^1.0.4",
+        "unist-util-remove-position": "^1.0.0",
+        "vfile-location": "^2.0.0",
+        "xtend": "^4.0.1"
       },
       "dependencies": {
         "xtend": {
@@ -16059,20 +14946,20 @@
       "integrity": "sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w==",
       "dev": true,
       "requires": {
-        "ccount": "1.0.3",
-        "is-alphanumeric": "1.0.0",
-        "is-decimal": "1.0.2",
-        "is-whitespace-character": "1.0.2",
-        "longest-streak": "2.0.2",
-        "markdown-escapes": "1.0.2",
-        "markdown-table": "1.1.2",
-        "mdast-util-compact": "1.0.2",
-        "parse-entities": "1.2.0",
-        "repeat-string": "1.6.1",
-        "state-toggle": "1.0.1",
-        "stringify-entities": "1.3.2",
-        "unherit": "1.1.1",
-        "xtend": "4.0.1"
+        "ccount": "^1.0.0",
+        "is-alphanumeric": "^1.0.0",
+        "is-decimal": "^1.0.0",
+        "is-whitespace-character": "^1.0.0",
+        "longest-streak": "^2.0.1",
+        "markdown-escapes": "^1.0.0",
+        "markdown-table": "^1.1.0",
+        "mdast-util-compact": "^1.0.0",
+        "parse-entities": "^1.0.2",
+        "repeat-string": "^1.5.4",
+        "state-toggle": "^1.0.0",
+        "stringify-entities": "^1.0.1",
+        "unherit": "^1.0.4",
+        "xtend": "^4.0.1"
       },
       "dependencies": {
         "xtend": {
@@ -16098,7 +14985,8 @@
     "repeat-string": {
       "version": "1.6.1",
       "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "dev": true
     },
     "repeating": {
       "version": "2.0.1",
@@ -16106,7 +14994,7 @@
       "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
       "dev": true,
       "requires": {
-        "is-finite": "1.0.2"
+        "is-finite": "^1.0.0"
       }
     },
     "replace-ext": {
@@ -16121,26 +15009,26 @@
       "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
       "dev": true,
       "requires": {
-        "aws-sign2": "0.7.0",
-        "aws4": "1.8.0",
-        "caseless": "0.12.0",
-        "combined-stream": "1.0.7",
-        "extend": "3.0.2",
-        "forever-agent": "0.6.1",
-        "form-data": "2.3.3",
-        "har-validator": "5.1.0",
-        "http-signature": "1.2.0",
-        "is-typedarray": "1.0.0",
-        "isstream": "0.1.2",
-        "json-stringify-safe": "5.0.1",
-        "mime-types": "2.1.21",
-        "oauth-sign": "0.9.0",
-        "performance-now": "2.1.0",
-        "qs": "6.5.2",
-        "safe-buffer": "5.1.2",
-        "tough-cookie": "2.4.3",
-        "tunnel-agent": "0.6.0",
-        "uuid": "3.3.2"
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.0",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.4.3",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
       }
     },
     "request-ip": {
@@ -16148,7 +15036,7 @@
       "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-2.1.1.tgz",
       "integrity": "sha512-cxNIoWf9JDuZM6YKdfTWdRsOi/hI4eIG6rGeodFyo8cCnTePoTW4qYbcKkQUz6evJkVXw+y0++BDz+Dh78M1pQ==",
       "requires": {
-        "is_js": "0.9.0"
+        "is_js": "^0.9.0"
       }
     },
     "request-promise-core": {
@@ -16157,7 +15045,7 @@
       "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
       "dev": true,
       "requires": {
-        "lodash": "4.17.11"
+        "lodash": "^4.13.1"
       }
     },
     "request-promise-native": {
@@ -16167,8 +15055,8 @@
       "dev": true,
       "requires": {
         "request-promise-core": "1.1.1",
-        "stealthy-require": "1.1.1",
-        "tough-cookie": "2.4.3"
+        "stealthy-require": "^1.1.0",
+        "tough-cookie": ">=2.3.3"
       }
     },
     "require-directory": {
@@ -16195,8 +15083,8 @@
       "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
       "dev": true,
       "requires": {
-        "caller-path": "0.1.0",
-        "resolve-from": "1.0.1"
+        "caller-path": "^0.1.0",
+        "resolve-from": "^1.0.0"
       }
     },
     "requires-port": {
@@ -16210,7 +15098,7 @@
       "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=",
       "dev": true,
       "requires": {
-        "underscore": "1.6.0"
+        "underscore": "~1.6.0"
       },
       "dependencies": {
         "underscore": {
@@ -16238,7 +15126,7 @@
       "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
       "dev": true,
       "requires": {
-        "path-parse": "1.0.6"
+        "path-parse": "^1.0.5"
       }
     },
     "resolve-cwd": {
@@ -16247,7 +15135,7 @@
       "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
       "dev": true,
       "requires": {
-        "resolve-from": "3.0.0"
+        "resolve-from": "^3.0.0"
       },
       "dependencies": {
         "resolve-from": {
@@ -16281,15 +15169,15 @@
       "integrity": "sha512-tpt4A/tOT8jxRDa91RbBV4c22AGj+WllOxT8rYSYhT2XDdL33Nca9HudwVx4mvP9PLokz+wpCu44tWUGVMYYLA==",
       "dev": true,
       "requires": {
-        "adjust-sourcemap-loader": "1.2.0",
-        "camelcase": "4.1.0",
-        "convert-source-map": "1.6.0",
-        "loader-utils": "1.1.0",
-        "lodash.defaults": "4.2.0",
-        "rework": "1.0.1",
-        "rework-visit": "1.0.0",
-        "source-map": "0.5.7",
-        "urix": "0.1.0"
+        "adjust-sourcemap-loader": "^1.1.0",
+        "camelcase": "^4.1.0",
+        "convert-source-map": "^1.5.1",
+        "loader-utils": "^1.1.0",
+        "lodash.defaults": "^4.0.0",
+        "rework": "^1.0.1",
+        "rework-visit": "^1.0.0",
+        "source-map": "^0.5.7",
+        "urix": "^0.1.0"
       },
       "dependencies": {
         "camelcase": {
@@ -16312,8 +15200,8 @@
       "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
       "dev": true,
       "requires": {
-        "onetime": "2.0.1",
-        "signal-exit": "3.0.2"
+        "onetime": "^2.0.0",
+        "signal-exit": "^3.0.2"
       }
     },
     "ret": {
@@ -16328,13 +15216,13 @@
       "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=",
       "dev": true,
       "requires": {
-        "convert-source-map": "0.3.5",
-        "css": "2.2.4"
+        "convert-source-map": "^0.3.3",
+        "css": "^2.0.0"
       },
       "dependencies": {
         "convert-source-map": {
           "version": "0.3.5",
-          "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
+          "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
           "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=",
           "dev": true
         }
@@ -16346,21 +15234,13 @@
       "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=",
       "dev": true
     },
-    "right-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
-      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
-      "requires": {
-        "align-text": "0.1.4"
-      }
-    },
     "rimraf": {
       "version": "2.6.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
       "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
       "dev": true,
       "requires": {
-        "glob": "7.1.3"
+        "glob": "^7.0.5"
       },
       "dependencies": {
         "glob": {
@@ -16369,12 +15249,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
@@ -16385,8 +15265,8 @@
       "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
       "dev": true,
       "requires": {
-        "hash-base": "3.0.4",
-        "inherits": "2.0.3"
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
       }
     },
     "rsvp": {
@@ -16401,7 +15281,7 @@
       "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
       "dev": true,
       "requires": {
-        "is-promise": "2.1.0"
+        "is-promise": "^2.1.0"
       }
     },
     "run-queue": {
@@ -16410,7 +15290,7 @@
       "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
       "dev": true,
       "requires": {
-        "aproba": "1.2.0"
+        "aproba": "^1.1.1"
       }
     },
     "rx-lite": {
@@ -16425,7 +15305,7 @@
       "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
       "dev": true,
       "requires": {
-        "rx-lite": "4.0.8"
+        "rx-lite": "*"
       }
     },
     "safe-buffer": {
@@ -16439,7 +15319,7 @@
       "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
       "dev": true,
       "requires": {
-        "ret": "0.1.15"
+        "ret": "~0.1.10"
       }
     },
     "safer-buffer": {
@@ -16447,26 +15327,21 @@
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
-    "samsam": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz",
-      "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc="
-    },
     "sane": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz",
       "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=",
       "dev": true,
       "requires": {
-        "anymatch": "2.0.0",
-        "capture-exit": "1.2.0",
-        "exec-sh": "0.2.2",
-        "fb-watchman": "2.0.0",
-        "fsevents": "1.2.4",
-        "micromatch": "3.1.10",
-        "minimist": "1.2.0",
-        "walker": "1.0.7",
-        "watch": "0.18.0"
+        "anymatch": "^2.0.0",
+        "capture-exit": "^1.2.0",
+        "exec-sh": "^0.2.0",
+        "fb-watchman": "^2.0.0",
+        "fsevents": "^1.2.3",
+        "micromatch": "^3.1.4",
+        "minimist": "^1.1.1",
+        "walker": "~1.0.5",
+        "watch": "~0.18.0"
       },
       "dependencies": {
         "anymatch": {
@@ -16475,8 +15350,8 @@
           "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
           "dev": true,
           "requires": {
-            "micromatch": "3.1.10",
-            "normalize-path": "2.1.1"
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
           }
         },
         "arr-diff": {
@@ -16497,16 +15372,16 @@
           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
           "dev": true,
           "requires": {
-            "arr-flatten": "1.1.0",
-            "array-unique": "0.3.2",
-            "extend-shallow": "2.0.1",
-            "fill-range": "4.0.0",
-            "isobject": "3.0.1",
-            "repeat-element": "1.1.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "extend-shallow": {
@@ -16515,7 +15390,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -16535,13 +15410,13 @@
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -16550,7 +15425,7 @@
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
@@ -16559,7 +15434,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
@@ -16568,7 +15443,7 @@
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -16577,7 +15452,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -16588,7 +15463,7 @@
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -16597,7 +15472,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -16608,9 +15483,9 @@
               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
@@ -16627,14 +15502,14 @@
           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
           "dev": true,
           "requires": {
-            "array-unique": "0.3.2",
-            "define-property": "1.0.0",
-            "expand-brackets": "2.1.4",
-            "extend-shallow": "2.0.1",
-            "fragment-cache": "0.2.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -16643,7 +15518,7 @@
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
@@ -16652,7 +15527,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -16663,10 +15538,10 @@
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
@@ -16675,7 +15550,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -16686,7 +15561,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -16695,7 +15570,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -16704,9 +15579,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-number": {
@@ -16715,7 +15590,7 @@
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
@@ -16724,7 +15599,7 @@
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
@@ -16747,24 +15622,24 @@
           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "define-property": "2.0.2",
-            "extend-shallow": "3.0.2",
-            "extglob": "2.0.4",
-            "fragment-cache": "0.2.1",
-            "kind-of": "6.0.2",
-            "nanomatch": "1.2.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         },
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
           "dev": true
         },
@@ -16782,10 +15657,10 @@
       "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
       "dev": true,
       "requires": {
-        "glob": "7.1.3",
-        "lodash": "4.17.11",
-        "scss-tokenizer": "0.2.3",
-        "yargs": "7.1.0"
+        "glob": "^7.0.0",
+        "lodash": "^4.0.0",
+        "scss-tokenizer": "^0.2.3",
+        "yargs": "^7.0.0"
       },
       "dependencies": {
         "camelcase": {
@@ -16800,9 +15675,9 @@
           "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
           "dev": true,
           "requires": {
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wrap-ansi": "2.1.0"
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wrap-ansi": "^2.0.0"
           }
         },
         "find-up": {
@@ -16811,8 +15686,8 @@
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "dev": true,
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "glob": {
@@ -16821,12 +15696,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "is-fullwidth-code-point": {
@@ -16835,29 +15710,29 @@
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "dev": true,
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "load-json-file": {
           "version": "1.1.0",
-          "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
           "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "parse-json": "2.2.0",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1",
-            "strip-bom": "2.0.0"
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
           }
         },
         "os-locale": {
           "version": "1.4.0",
-          "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
           "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
           "dev": true,
           "requires": {
-            "lcid": "1.0.0"
+            "lcid": "^1.0.0"
           }
         },
         "path-exists": {
@@ -16866,7 +15741,7 @@
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "dev": true,
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         },
         "path-type": {
@@ -16875,14 +15750,14 @@
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         },
@@ -16892,9 +15767,9 @@
           "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
           "dev": true,
           "requires": {
-            "load-json-file": "1.1.0",
-            "normalize-package-data": "2.4.0",
-            "path-type": "1.1.0"
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
           }
         },
         "read-pkg-up": {
@@ -16903,8 +15778,8 @@
           "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
           "dev": true,
           "requires": {
-            "find-up": "1.1.2",
-            "read-pkg": "1.1.0"
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
           }
         },
         "string-width": {
@@ -16913,9 +15788,9 @@
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "dev": true,
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "strip-bom": {
@@ -16924,7 +15799,7 @@
           "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
           "dev": true,
           "requires": {
-            "is-utf8": "0.2.1"
+            "is-utf8": "^0.2.0"
           }
         },
         "which-module": {
@@ -16939,19 +15814,19 @@
           "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
           "dev": true,
           "requires": {
-            "camelcase": "3.0.0",
-            "cliui": "3.2.0",
-            "decamelize": "1.2.0",
-            "get-caller-file": "1.0.3",
-            "os-locale": "1.4.0",
-            "read-pkg-up": "1.0.1",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "1.0.2",
-            "which-module": "1.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "5.0.0"
+            "camelcase": "^3.0.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^1.4.0",
+            "read-pkg-up": "^1.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^1.0.2",
+            "which-module": "^1.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^5.0.0"
           }
         },
         "yargs-parser": {
@@ -16960,7 +15835,7 @@
           "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
           "dev": true,
           "requires": {
-            "camelcase": "3.0.0"
+            "camelcase": "^3.0.0"
           }
         }
       }
@@ -16971,12 +15846,12 @@
       "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==",
       "dev": true,
       "requires": {
-        "clone-deep": "2.0.2",
-        "loader-utils": "1.1.0",
-        "lodash.tail": "4.1.1",
-        "neo-async": "2.6.0",
-        "pify": "3.0.0",
-        "semver": "5.6.0"
+        "clone-deep": "^2.0.1",
+        "loader-utils": "^1.0.1",
+        "lodash.tail": "^4.1.1",
+        "neo-async": "^2.5.0",
+        "pify": "^3.0.0",
+        "semver": "^5.5.0"
       },
       "dependencies": {
         "semver": {
@@ -16990,15 +15865,16 @@
     "sax": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "dev": true
     },
     "scheduler": {
       "version": "0.10.0",
       "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.10.0.tgz",
       "integrity": "sha512-+TSTVTCBAA3h8Anei3haDc1IRwMeDmtI/y/o3iBe3Mjl2vwYF9DtPDt929HyRmV/e7au7CLu8sc4C4W0VOs29w==",
       "requires": {
-        "loose-envify": "1.4.0",
-        "object-assign": "4.1.1"
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
       }
     },
     "schema-utils": {
@@ -17007,8 +15883,8 @@
       "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
       "dev": true,
       "requires": {
-        "ajv": "6.5.4",
-        "ajv-keywords": "3.2.0"
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0"
       }
     },
     "scss-tokenizer": {
@@ -17017,8 +15893,8 @@
       "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
       "dev": true,
       "requires": {
-        "js-base64": "2.4.9",
-        "source-map": "0.4.4"
+        "js-base64": "^2.1.8",
+        "source-map": "^0.4.2"
       }
     },
     "seekout": {
@@ -17029,32 +15905,27 @@
     },
     "semver": {
       "version": "5.1.0",
-      "resolved": "http://registry.npmjs.org/semver/-/semver-5.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz",
       "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU="
     },
-    "semver-compare": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
-      "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w="
-    },
     "send": {
       "version": "0.16.2",
       "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
       "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
       "requires": {
         "debug": "2.6.9",
-        "depd": "1.1.2",
-        "destroy": "1.0.4",
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "etag": "1.8.1",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
         "fresh": "0.5.2",
-        "http-errors": "1.6.3",
+        "http-errors": "~1.6.2",
         "mime": "1.4.1",
         "ms": "2.0.0",
-        "on-finished": "2.3.0",
-        "range-parser": "1.2.0",
-        "statuses": "1.4.0"
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.0",
+        "statuses": "~1.4.0"
       },
       "dependencies": {
         "debug": {
@@ -17077,14 +15948,6 @@
         }
       }
     },
-    "sentence-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz",
-      "integrity": "sha1-gDSq/CFFdy06vhUJqkLJ4QQtwTk=",
-      "requires": {
-        "lower-case": "1.1.4"
-      }
-    },
     "serialize-javascript": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
@@ -17095,10 +15958,10 @@
       "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
       "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=",
       "requires": {
-        "etag": "1.8.1",
+        "etag": "~1.8.1",
         "fresh": "0.5.2",
         "ms": "2.1.1",
-        "parseurl": "1.3.2",
+        "parseurl": "~1.3.2",
         "safe-buffer": "5.1.1"
       },
       "dependencies": {
@@ -17114,9 +15977,9 @@
       "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
       "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
       "requires": {
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "parseurl": "1.3.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.2",
         "send": "0.16.2"
       }
     },
@@ -17132,10 +15995,10 @@
       "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
       "dev": true,
       "requires": {
-        "extend-shallow": "2.0.1",
-        "is-extendable": "0.1.1",
-        "is-plain-object": "2.0.4",
-        "split-string": "3.1.0"
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
       },
       "dependencies": {
         "extend-shallow": {
@@ -17144,7 +16007,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         }
       }
@@ -17152,7 +16015,8 @@
     "setimmediate": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+      "dev": true
     },
     "setprototypeof": {
       "version": "1.1.0",
@@ -17161,12 +16025,12 @@
     },
     "sha.js": {
       "version": "2.4.11",
-      "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
       "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "safe-buffer": "5.1.2"
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
     "shallow-clone": {
@@ -17175,9 +16039,9 @@
       "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
       "dev": true,
       "requires": {
-        "is-extendable": "0.1.1",
-        "kind-of": "5.1.0",
-        "mixin-object": "2.0.1"
+        "is-extendable": "^0.1.1",
+        "kind-of": "^5.0.0",
+        "mixin-object": "^2.0.1"
       },
       "dependencies": {
         "kind-of": {
@@ -17199,7 +16063,7 @@
       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
       "dev": true,
       "requires": {
-        "shebang-regex": "1.0.0"
+        "shebang-regex": "^1.0.0"
       }
     },
     "shebang-regex": {
@@ -17219,7 +16083,7 @@
       "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.13.tgz",
       "integrity": "sha512-dBuNnQGKrJNfjunmXI2X7bl1gnMO4PwbNxrTzO1JvilODmL7WyyCtA+DYxe9XunLXmxmgzFIvKPQ6XRAQrr46Q==",
       "requires": {
-        "nanoid": "1.3.1"
+        "nanoid": "^1.0.7"
       }
     },
     "signal-exit": {
@@ -17228,18 +16092,6 @@
       "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
       "dev": true
     },
-    "sinon": {
-      "version": "2.0.0-pre",
-      "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.0.0-pre.tgz",
-      "integrity": "sha1-GCk7APsvFVyZ6OW0bjH36t4ygV0=",
-      "requires": {
-        "formatio": "1.1.1",
-        "lolex": "1.3.2",
-        "samsam": "1.1.2",
-        "text-encoding": "0.5.2",
-        "util": "0.11.1"
-      }
-    },
     "sisteransi": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz",
@@ -17258,15 +16110,7 @@
       "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
       "dev": true,
       "requires": {
-        "is-fullwidth-code-point": "2.0.0"
-      }
-    },
-    "snake-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz",
-      "integrity": "sha1-DC8l4wUVjZoY09l3BmGH/vilpmo=",
-      "requires": {
-        "sentence-case": "1.1.3"
+        "is-fullwidth-code-point": "^2.0.0"
       }
     },
     "snapdragon": {
@@ -17275,14 +16119,14 @@
       "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
       "dev": true,
       "requires": {
-        "base": "0.11.2",
-        "debug": "2.6.9",
-        "define-property": "0.2.5",
-        "extend-shallow": "2.0.1",
-        "map-cache": "0.2.2",
-        "source-map": "0.5.7",
-        "source-map-resolve": "0.5.2",
-        "use": "3.1.1"
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
       },
       "dependencies": {
         "debug": {
@@ -17300,7 +16144,7 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         },
         "extend-shallow": {
@@ -17309,7 +16153,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         },
         "ms": {
@@ -17332,9 +16176,9 @@
       "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
       "dev": true,
       "requires": {
-        "define-property": "1.0.0",
-        "isobject": "3.0.1",
-        "snapdragon-util": "3.0.1"
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
       },
       "dependencies": {
         "define-property": {
@@ -17343,7 +16187,7 @@
           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "1.0.2"
+            "is-descriptor": "^1.0.0"
           }
         },
         "is-accessor-descriptor": {
@@ -17352,7 +16196,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -17361,7 +16205,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -17370,9 +16214,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "isobject": {
@@ -17395,7 +16239,7 @@
       "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.2.0"
       }
     },
     "sort-array": {
@@ -17404,9 +16248,9 @@
       "integrity": "sha1-OKnG2if9fRR7QuYFVPKBGHtN9HI=",
       "dev": true,
       "requires": {
-        "array-back": "1.0.4",
-        "object-get": "2.1.0",
-        "typical": "2.6.1"
+        "array-back": "^1.0.4",
+        "object-get": "^2.1.0",
+        "typical": "^2.6.0"
       },
       "dependencies": {
         "array-back": {
@@ -17415,7 +16259,7 @@
           "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
           "dev": true,
           "requires": {
-            "typical": "2.6.1"
+            "typical": "^2.6.0"
           }
         }
       }
@@ -17426,7 +16270,7 @@
       "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
       "dev": true,
       "requires": {
-        "is-plain-obj": "1.1.0"
+        "is-plain-obj": "^1.0.0"
       }
     },
     "source-list-map": {
@@ -17439,8 +16283,9 @@
       "version": "0.4.4",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
       "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+      "dev": true,
       "requires": {
-        "amdefine": "1.0.1"
+        "amdefine": ">=0.0.4"
       }
     },
     "source-map-resolve": {
@@ -17449,11 +16294,11 @@
       "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
       "dev": true,
       "requires": {
-        "atob": "2.1.2",
-        "decode-uri-component": "0.2.0",
-        "resolve-url": "0.2.1",
-        "source-map-url": "0.4.0",
-        "urix": "0.1.0"
+        "atob": "^2.1.1",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
       }
     },
     "source-map-support": {
@@ -17462,7 +16307,7 @@
       "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
       "dev": true,
       "requires": {
-        "source-map": "0.5.7"
+        "source-map": "^0.5.6"
       },
       "dependencies": {
         "source-map": {
@@ -17479,19 +16324,14 @@
       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
       "dev": true
     },
-    "spark-md5": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
-      "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8="
-    },
     "spdx-correct": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
       "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
       "dev": true,
       "requires": {
-        "spdx-expression-parse": "3.0.0",
-        "spdx-license-ids": "3.0.1"
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
     "spdx-exceptions": {
@@ -17506,8 +16346,8 @@
       "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
       "dev": true,
       "requires": {
-        "spdx-exceptions": "2.2.0",
-        "spdx-license-ids": "3.0.1"
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
     "spdx-license-ids": {
@@ -17528,7 +16368,7 @@
       "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
       "dev": true,
       "requires": {
-        "extend-shallow": "3.0.2"
+        "extend-shallow": "^3.0.0"
       }
     },
     "sprintf-js": {
@@ -17543,15 +16383,15 @@
       "integrity": "sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA==",
       "dev": true,
       "requires": {
-        "asn1": "0.2.4",
-        "assert-plus": "1.0.0",
-        "bcrypt-pbkdf": "1.0.2",
-        "dashdash": "1.14.1",
-        "ecc-jsbn": "0.1.2",
-        "getpass": "0.1.7",
-        "jsbn": "0.1.1",
-        "safer-buffer": "2.1.2",
-        "tweetnacl": "0.14.5"
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
       }
     },
     "ssri": {
@@ -17560,7 +16400,7 @@
       "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "^5.1.1"
       }
     },
     "stack-utils": {
@@ -17581,8 +16421,8 @@
       "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
       "dev": true,
       "requires": {
-        "define-property": "0.2.5",
-        "object-copy": "0.1.0"
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
       },
       "dependencies": {
         "define-property": {
@@ -17591,7 +16431,7 @@
           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
           "dev": true,
           "requires": {
-            "is-descriptor": "0.1.6"
+            "is-descriptor": "^0.1.0"
           }
         }
       }
@@ -17607,7 +16447,7 @@
       "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
       "dev": true,
       "requires": {
-        "readable-stream": "2.0.6"
+        "readable-stream": "^2.0.1"
       }
     },
     "stealthy-require": {
@@ -17622,8 +16462,8 @@
       "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "readable-stream": "2.0.6"
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
       }
     },
     "stream-connect": {
@@ -17632,7 +16472,7 @@
       "integrity": "sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc=",
       "dev": true,
       "requires": {
-        "array-back": "1.0.4"
+        "array-back": "^1.0.2"
       },
       "dependencies": {
         "array-back": {
@@ -17641,24 +16481,19 @@
           "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
           "dev": true,
           "requires": {
-            "typical": "2.6.1"
+            "typical": "^2.6.0"
           }
         }
       }
     },
-    "stream-consume": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
-      "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg=="
-    },
     "stream-each": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
       "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
       "dev": true,
       "requires": {
-        "end-of-stream": "1.4.1",
-        "stream-shift": "1.0.0"
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
       }
     },
     "stream-http": {
@@ -17667,11 +16502,11 @@
       "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
       "dev": true,
       "requires": {
-        "builtin-status-codes": "3.0.0",
-        "inherits": "2.0.3",
-        "readable-stream": "2.3.6",
-        "to-arraybuffer": "1.0.1",
-        "xtend": "4.0.1"
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
       },
       "dependencies": {
         "process-nextick-args": {
@@ -17682,17 +16517,17 @@
         },
         "readable-stream": {
           "version": "2.3.6",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
           "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
           "dev": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "string_decoder": {
@@ -17701,7 +16536,7 @@
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         },
         "xtend": {
@@ -17727,7 +16562,8 @@
     "strict-uri-encode": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
-      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+      "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+      "dev": true
     },
     "string-hash": {
       "version": "1.1.3",
@@ -17741,8 +16577,8 @@
       "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
       "dev": true,
       "requires": {
-        "astral-regex": "1.0.0",
-        "strip-ansi": "4.0.0"
+        "astral-regex": "^1.0.0",
+        "strip-ansi": "^4.0.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -17757,7 +16593,7 @@
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "3.0.0"
+            "ansi-regex": "^3.0.0"
           }
         }
       }
@@ -17766,25 +16602,22 @@
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
-      "dev": true,
       "requires": {
-        "is-fullwidth-code-point": "2.0.0",
-        "strip-ansi": "4.0.0"
+        "is-fullwidth-code-point": "^2.0.0",
+        "strip-ansi": "^4.0.0"
       },
       "dependencies": {
         "ansi-regex": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
-          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
-          "dev": true
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
         },
         "strip-ansi": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
           "requires": {
-            "ansi-regex": "3.0.0"
+            "ansi-regex": "^3.0.0"
           }
         }
       }
@@ -17800,19 +16633,19 @@
       "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
       "dev": true,
       "requires": {
-        "character-entities-html4": "1.1.2",
-        "character-entities-legacy": "1.1.2",
-        "is-alphanumerical": "1.0.2",
-        "is-hexadecimal": "1.0.2"
+        "character-entities-html4": "^1.0.0",
+        "character-entities-legacy": "^1.0.0",
+        "is-alphanumerical": "^1.0.0",
+        "is-hexadecimal": "^1.0.0"
       }
     },
     "strip-ansi": {
       "version": "3.0.1",
-      "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
       "dev": true,
       "requires": {
-        "ansi-regex": "2.1.1"
+        "ansi-regex": "^2.0.0"
       }
     },
     "strip-bom": {
@@ -17833,7 +16666,7 @@
       "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
       "dev": true,
       "requires": {
-        "get-stdin": "4.0.1"
+        "get-stdin": "^4.0.1"
       }
     },
     "strip-json-comments": {
@@ -17848,8 +16681,8 @@
       "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==",
       "dev": true,
       "requires": {
-        "loader-utils": "1.1.0",
-        "schema-utils": "0.4.7"
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^0.4.5"
       }
     },
     "style-search": {
@@ -17864,52 +16697,52 @@
       "integrity": "sha512-Q0UcbFPRiC+3FejNyIBAWbMuKwZNAC0kvZtGQbjwA9LMKDod6xMlBsiIigQxmE3ywpmTeFj3mkG5Jj36EfC7XA==",
       "dev": true,
       "requires": {
-        "autoprefixer": "9.3.1",
-        "balanced-match": "1.0.0",
-        "chalk": "2.4.1",
-        "cosmiconfig": "5.0.6",
-        "debug": "4.1.0",
-        "execall": "1.0.0",
-        "file-entry-cache": "2.0.0",
-        "get-stdin": "6.0.0",
-        "globby": "8.0.1",
-        "globjoin": "0.1.4",
-        "html-tags": "2.0.0",
-        "ignore": "4.0.6",
-        "import-lazy": "3.1.0",
-        "imurmurhash": "0.1.4",
-        "known-css-properties": "0.8.0",
-        "leven": "2.1.0",
-        "lodash": "4.17.11",
-        "log-symbols": "2.2.0",
-        "mathml-tag-names": "2.1.0",
-        "meow": "5.0.0",
-        "micromatch": "2.3.11",
-        "normalize-selector": "0.2.0",
-        "pify": "4.0.1",
-        "postcss": "7.0.5",
-        "postcss-html": "0.34.0",
-        "postcss-jsx": "0.34.0",
-        "postcss-less": "2.0.0",
-        "postcss-markdown": "0.34.0",
-        "postcss-media-query-parser": "0.2.3",
-        "postcss-reporter": "6.0.0",
-        "postcss-resolve-nested-selector": "0.1.1",
-        "postcss-safe-parser": "4.0.1",
-        "postcss-sass": "0.3.3",
-        "postcss-scss": "2.0.0",
-        "postcss-selector-parser": "3.1.1",
-        "postcss-styled": "0.34.0",
-        "postcss-syntax": "0.34.0",
-        "postcss-value-parser": "3.3.1",
-        "resolve-from": "4.0.0",
-        "signal-exit": "3.0.2",
-        "specificity": "0.4.1",
-        "string-width": "2.1.1",
-        "style-search": "0.1.0",
-        "sugarss": "2.0.0",
-        "svg-tags": "1.0.0",
-        "table": "5.1.0"
+        "autoprefixer": "^9.0.0",
+        "balanced-match": "^1.0.0",
+        "chalk": "^2.4.1",
+        "cosmiconfig": "^5.0.0",
+        "debug": "^4.0.0",
+        "execall": "^1.0.0",
+        "file-entry-cache": "^2.0.0",
+        "get-stdin": "^6.0.0",
+        "globby": "^8.0.0",
+        "globjoin": "^0.1.4",
+        "html-tags": "^2.0.0",
+        "ignore": "^4.0.0",
+        "import-lazy": "^3.1.0",
+        "imurmurhash": "^0.1.4",
+        "known-css-properties": "^0.8.0",
+        "leven": "^2.1.0",
+        "lodash": "^4.17.4",
+        "log-symbols": "^2.0.0",
+        "mathml-tag-names": "^2.0.1",
+        "meow": "^5.0.0",
+        "micromatch": "^2.3.11",
+        "normalize-selector": "^0.2.0",
+        "pify": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-html": "^0.34.0",
+        "postcss-jsx": "^0.34.0",
+        "postcss-less": "^2.0.0",
+        "postcss-markdown": "^0.34.0",
+        "postcss-media-query-parser": "^0.2.3",
+        "postcss-reporter": "^6.0.0",
+        "postcss-resolve-nested-selector": "^0.1.1",
+        "postcss-safe-parser": "^4.0.0",
+        "postcss-sass": "^0.3.0",
+        "postcss-scss": "^2.0.0",
+        "postcss-selector-parser": "^3.1.0",
+        "postcss-styled": "^0.34.0",
+        "postcss-syntax": "^0.34.0",
+        "postcss-value-parser": "^3.3.0",
+        "resolve-from": "^4.0.0",
+        "signal-exit": "^3.0.2",
+        "specificity": "^0.4.1",
+        "string-width": "^2.1.0",
+        "style-search": "^0.1.0",
+        "sugarss": "^2.0.0",
+        "svg-tags": "^1.0.0",
+        "table": "^5.0.0"
       },
       "dependencies": {
         "autoprefixer": {
@@ -17918,12 +16751,12 @@
           "integrity": "sha512-DY9gOh8z3tnCbJ13JIWaeQsoYncTGdsrgCceBaQSIL4nvdrLxgbRSBPevg2XbX7u4QCSfLheSJEEIUUSlkbx6Q==",
           "dev": true,
           "requires": {
-            "browserslist": "4.3.3",
-            "caniuse-lite": "1.0.30000899",
-            "normalize-range": "0.1.2",
-            "num2fraction": "1.2.2",
-            "postcss": "7.0.5",
-            "postcss-value-parser": "3.3.1"
+            "browserslist": "^4.3.3",
+            "caniuse-lite": "^1.0.30000898",
+            "normalize-range": "^0.1.2",
+            "num2fraction": "^1.2.2",
+            "postcss": "^7.0.5",
+            "postcss-value-parser": "^3.3.1"
           }
         },
         "browserslist": {
@@ -17932,9 +16765,9 @@
           "integrity": "sha512-6h84UD1mmHeuQ9IucX6yzBc+KBYcBBTLYt2CXtY7GYCra6iE5kOm7oM+zuGw/0tjGtbJxjm58OvxSBmogEMCRQ==",
           "dev": true,
           "requires": {
-            "caniuse-lite": "1.0.30000899",
-            "electron-to-chromium": "1.3.82",
-            "node-releases": "1.0.0-alpha.15"
+            "caniuse-lite": "^1.0.30000898",
+            "electron-to-chromium": "^1.3.81",
+            "node-releases": "^1.0.0-alpha.15"
           }
         },
         "camelcase": {
@@ -17949,9 +16782,9 @@
           "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
           "dev": true,
           "requires": {
-            "camelcase": "4.1.0",
-            "map-obj": "2.0.0",
-            "quick-lru": "1.1.0"
+            "camelcase": "^4.1.0",
+            "map-obj": "^2.0.0",
+            "quick-lru": "^1.0.0"
           }
         },
         "cosmiconfig": {
@@ -17960,9 +16793,9 @@
           "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==",
           "dev": true,
           "requires": {
-            "is-directory": "0.3.1",
-            "js-yaml": "3.12.0",
-            "parse-json": "4.0.0"
+            "is-directory": "^0.3.1",
+            "js-yaml": "^3.9.0",
+            "parse-json": "^4.0.0"
           }
         },
         "esprima": {
@@ -17983,12 +16816,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "globby": {
@@ -17997,13 +16830,13 @@
           "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
           "dev": true,
           "requires": {
-            "array-union": "1.0.2",
-            "dir-glob": "2.0.0",
-            "fast-glob": "2.2.3",
-            "glob": "7.1.3",
-            "ignore": "3.3.10",
-            "pify": "3.0.0",
-            "slash": "1.0.0"
+            "array-union": "^1.0.1",
+            "dir-glob": "^2.0.0",
+            "fast-glob": "^2.0.2",
+            "glob": "^7.1.2",
+            "ignore": "^3.3.5",
+            "pify": "^3.0.0",
+            "slash": "^1.0.0"
           },
           "dependencies": {
             "ignore": {
@@ -18038,8 +16871,8 @@
           "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
           "dev": true,
           "requires": {
-            "argparse": "1.0.10",
-            "esprima": "4.0.1"
+            "argparse": "^1.0.7",
+            "esprima": "^4.0.0"
           }
         },
         "load-json-file": {
@@ -18048,10 +16881,10 @@
           "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "parse-json": "4.0.0",
-            "pify": "3.0.0",
-            "strip-bom": "3.0.0"
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^4.0.0",
+            "pify": "^3.0.0",
+            "strip-bom": "^3.0.0"
           },
           "dependencies": {
             "pify": {
@@ -18074,15 +16907,15 @@
           "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
           "dev": true,
           "requires": {
-            "camelcase-keys": "4.2.0",
-            "decamelize-keys": "1.1.0",
-            "loud-rejection": "1.6.0",
-            "minimist-options": "3.0.2",
-            "normalize-package-data": "2.4.0",
-            "read-pkg-up": "3.0.0",
-            "redent": "2.0.0",
-            "trim-newlines": "2.0.0",
-            "yargs-parser": "10.1.0"
+            "camelcase-keys": "^4.0.0",
+            "decamelize-keys": "^1.0.0",
+            "loud-rejection": "^1.0.0",
+            "minimist-options": "^3.0.1",
+            "normalize-package-data": "^2.3.4",
+            "read-pkg-up": "^3.0.0",
+            "redent": "^2.0.0",
+            "trim-newlines": "^2.0.0",
+            "yargs-parser": "^10.0.0"
           }
         },
         "parse-json": {
@@ -18091,8 +16924,8 @@
           "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
           "dev": true,
           "requires": {
-            "error-ex": "1.3.2",
-            "json-parse-better-errors": "1.0.2"
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
           }
         },
         "path-type": {
@@ -18101,7 +16934,7 @@
           "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
           "dev": true,
           "requires": {
-            "pify": "3.0.0"
+            "pify": "^3.0.0"
           },
           "dependencies": {
             "pify": {
@@ -18124,9 +16957,9 @@
           "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.1",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.5.0"
           }
         },
         "postcss-scss": {
@@ -18135,7 +16968,7 @@
           "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==",
           "dev": true,
           "requires": {
-            "postcss": "7.0.5"
+            "postcss": "^7.0.0"
           }
         },
         "postcss-selector-parser": {
@@ -18144,9 +16977,9 @@
           "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
           "dev": true,
           "requires": {
-            "dot-prop": "4.2.0",
-            "indexes-of": "1.0.1",
-            "uniq": "1.0.1"
+            "dot-prop": "^4.1.1",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
           }
         },
         "read-pkg": {
@@ -18155,9 +16988,9 @@
           "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
           "dev": true,
           "requires": {
-            "load-json-file": "4.0.0",
-            "normalize-package-data": "2.4.0",
-            "path-type": "3.0.0"
+            "load-json-file": "^4.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^3.0.0"
           }
         },
         "read-pkg-up": {
@@ -18166,8 +16999,8 @@
           "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
           "dev": true,
           "requires": {
-            "find-up": "2.1.0",
-            "read-pkg": "3.0.0"
+            "find-up": "^2.0.0",
+            "read-pkg": "^3.0.0"
           }
         },
         "redent": {
@@ -18176,8 +17009,8 @@
           "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
           "dev": true,
           "requires": {
-            "indent-string": "3.2.0",
-            "strip-indent": "2.0.0"
+            "indent-string": "^3.0.0",
+            "strip-indent": "^2.0.0"
           }
         },
         "resolve-from": {
@@ -18204,10 +17037,10 @@
           "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==",
           "dev": true,
           "requires": {
-            "ajv": "6.5.4",
-            "lodash": "4.17.11",
+            "ajv": "^6.5.3",
+            "lodash": "^4.17.10",
             "slice-ansi": "1.0.0",
-            "string-width": "2.1.1"
+            "string-width": "^2.1.1"
           }
         },
         "trim-newlines": {
@@ -18222,7 +17055,7 @@
           "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
           "dev": true,
           "requires": {
-            "camelcase": "4.1.0"
+            "camelcase": "^4.1.0"
           }
         }
       }
@@ -18239,7 +17072,7 @@
       "integrity": "sha512-07x0TaSIzvXlbOioUU4ORkCIM07kyIuojkbSVCyFWNVgXMXYHfhnQSCkqu+oHWJf3YADAnPGWzdJ53NxkoJ7RA==",
       "dev": true,
       "requires": {
-        "stylelint-config-recommended": "2.1.0"
+        "stylelint-config-recommended": "^2.1.0"
       }
     },
     "sugarss": {
@@ -18248,7 +17081,7 @@
       "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==",
       "dev": true,
       "requires": {
-        "postcss": "7.0.5"
+        "postcss": "^7.0.2"
       },
       "dependencies": {
         "postcss": {
@@ -18257,9 +17090,9 @@
           "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==",
           "dev": true,
           "requires": {
-            "chalk": "2.4.1",
-            "source-map": "0.6.1",
-            "supports-color": "5.5.0"
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.5.0"
           }
         },
         "source-map": {
@@ -18270,66 +17103,12 @@
         }
       }
     },
-    "superagent": {
-      "version": "3.8.3",
-      "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
-      "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
-      "requires": {
-        "component-emitter": "1.2.1",
-        "cookiejar": "2.1.2",
-        "debug": "3.2.6",
-        "extend": "3.0.2",
-        "form-data": "2.3.3",
-        "formidable": "1.2.1",
-        "methods": "1.1.2",
-        "mime": "1.4.1",
-        "qs": "6.5.2",
-        "readable-stream": "2.3.6"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
-          "requires": {
-            "ms": "2.1.1"
-          }
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-          "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
-          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-          "requires": {
-            "safe-buffer": "5.1.2"
-          }
-        }
-      }
-    },
     "supports-color": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
       "requires": {
-        "has-flag": "3.0.0"
+        "has-flag": "^3.0.0"
       }
     },
     "svg-tags": {
@@ -18344,22 +17123,13 @@
       "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
       "dev": true,
       "requires": {
-        "coa": "1.0.4",
-        "colors": "1.1.2",
-        "csso": "2.3.2",
-        "js-yaml": "3.7.0",
-        "mkdirp": "0.5.1",
-        "sax": "1.2.4",
-        "whet.extend": "0.9.9"
-      }
-    },
-    "swap-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz",
-      "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=",
-      "requires": {
-        "lower-case": "1.1.4",
-        "upper-case": "1.1.3"
+        "coa": "~1.0.1",
+        "colors": "~1.1.2",
+        "csso": "~2.3.1",
+        "js-yaml": "~3.7.0",
+        "mkdirp": "~0.5.1",
+        "sax": "~1.2.1",
+        "whet.extend": "~0.9.9"
       }
     },
     "symbol-observable": {
@@ -18379,12 +17149,12 @@
       "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
       "dev": true,
       "requires": {
-        "ajv": "5.5.2",
-        "ajv-keywords": "2.1.1",
-        "chalk": "2.4.1",
-        "lodash": "4.17.11",
+        "ajv": "^5.2.3",
+        "ajv-keywords": "^2.1.0",
+        "chalk": "^2.1.0",
+        "lodash": "^4.17.4",
         "slice-ansi": "1.0.0",
-        "string-width": "2.1.1"
+        "string-width": "^2.1.1"
       },
       "dependencies": {
         "ajv": {
@@ -18393,10 +17163,10 @@
           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
           "dev": true,
           "requires": {
-            "co": "4.6.0",
-            "fast-deep-equal": "1.1.0",
-            "fast-json-stable-stringify": "2.0.0",
-            "json-schema-traverse": "0.3.1"
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
           }
         },
         "ajv-keywords": {
@@ -18424,11 +17194,11 @@
       "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz",
       "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==",
       "requires": {
-        "array-back": "2.0.0",
-        "deep-extend": "0.6.0",
-        "lodash.padend": "4.6.1",
-        "typical": "2.6.1",
-        "wordwrapjs": "3.0.0"
+        "array-back": "^2.0.0",
+        "deep-extend": "~0.6.0",
+        "lodash.padend": "^4.6.1",
+        "typical": "^2.6.1",
+        "wordwrapjs": "^3.0.0"
       }
     },
     "taffydb": {
@@ -18449,36 +17219,52 @@
       "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
       "dev": true,
       "requires": {
-        "block-stream": "0.0.9",
-        "fstream": "1.0.11",
-        "inherits": "2.0.3"
+        "block-stream": "*",
+        "fstream": "^1.0.2",
+        "inherits": "2"
       }
     },
     "tc-accounts": {
-      "version": "git+https://github.com/appirio-tech/accounts-app.git#a881c2f01802ed8c96d13fa16a1927c75d5a0fa6",
-      "requires": {
-        "@uirouter/angularjs": "1.0.18",
-        "angucomplete-alt": "2.5.0",
-        "angular": "1.7.2",
-        "angular-auth0": "3.0.0",
-        "angular-cookies": "1.7.2",
-        "angular-messages": "1.7.2",
-        "appirio-tech-ng-iso-constants": "1.0.6",
-        "appirio-tech-ng-ui-components": "2.2.5",
-        "appirio-tech-react-components": "github:appirio-tech/react-components#dfd84cc432bcd280ce7c9c4b72224b879b77064d",
-        "auth0-js": "9.6.1",
-        "babel-polyfill": "6.26.0",
-        "filestack-js": "1.14.6",
-        "isomorphic-fetch": "2.2.1",
-        "lodash": "4.17.10",
-        "ng-onload": "0.2.1",
-        "prop-types": "15.6.2",
-        "rc-slider": "8.6.2",
-        "react": "15.6.2",
-        "react-dom": "15.6.2",
-        "react2angular": "4.0.4"
-      },
-      "dependencies": {
+      "version": "git+https://github.com/appirio-tech/accounts-app.git#6ce45fbbafb27ed066e849a6a8348948224d8cc5",
+      "from": "git+https://github.com/appirio-tech/accounts-app.git#dev",
+      "requires": {
+        "@uirouter/angularjs": "^1.0.0",
+        "angucomplete-alt": "^2.1.0",
+        "angular": "^1.4.8",
+        "angular-auth0": "^3.0.0",
+        "angular-cookies": "^1.5.1",
+        "angular-messages": "^1.5.2",
+        "appirio-tech-ng-iso-constants": "^1.0.6",
+        "appirio-tech-ng-ui-components": "^2.2.4",
+        "appirio-tech-react-components": "github:appirio-tech/react-components#feature/connectv2",
+        "auth0-js": "^9.6.1",
+        "babel-polyfill": "^6.7.4",
+        "filestack-js": "^1.13.2",
+        "isomorphic-fetch": "^2.2.1",
+        "lodash": "^4.6.1",
+        "ng-onload": "^0.2.1",
+        "prop-types": "^15.6.2",
+        "rc-slider": "^8.6.2",
+        "react": "^15.3.1",
+        "react-dom": "^15.3.1",
+        "react2angular": "^4.0.4"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",
+          "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",
+          "requires": {
+            "regenerator-runtime": "^0.13.2"
+          },
+          "dependencies": {
+            "regenerator-runtime": {
+              "version": "0.13.3",
+              "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+              "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
+            }
+          }
+        },
         "@types/angular": {
           "version": "1.6.50",
           "resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.6.50.tgz",
@@ -18494,7 +17280,7 @@
           "resolved": "https://registry.npmjs.org/@types/lodash.frompairs/-/lodash.frompairs-4.0.4.tgz",
           "integrity": "sha512-u/Ifsrh5yJ3j4DJ+sHiWeORyeQhDpSlVmdLqb4Z27pB0Vkp6ECw24mBEY0KxRXDi1Hy/NqVL7Cq3vqNEddQgcA==",
           "requires": {
-            "@types/lodash": "4.14.116"
+            "@types/lodash": "*"
           }
         },
         "@uirouter/angularjs": {
@@ -18510,6 +17296,16 @@
           "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-5.0.19.tgz",
           "integrity": "sha512-wow+CKRThUAQkiTLNQCBsKQIU3NbH8GGH/w/TrcjKdvkZQA2jQB9QSqmmZxj7XNoZXY7QVcSSc4DWmxuSeAWmQ=="
         },
+        "Base64": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.1.4.tgz",
+          "integrity": "sha1-6fbGvvVn/WNepBYqsU3TKedKpt4="
+        },
+        "abab": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
+          "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="
+        },
         "abbrev": {
           "version": "1.1.1",
           "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -18520,7 +17316,7 @@
           "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
           "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
           "requires": {
-            "mime-types": "2.1.18",
+            "mime-types": "~2.1.18",
             "negotiator": "0.6.1"
           }
         },
@@ -18534,7 +17330,7 @@
           "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
           "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
           "requires": {
-            "acorn": "2.7.0"
+            "acorn": "^2.1.0"
           },
           "dependencies": {
             "acorn": {
@@ -18549,7 +17345,7 @@
           "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
           "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
           "requires": {
-            "acorn": "3.3.0"
+            "acorn": "^3.0.4"
           },
           "dependencies": {
             "acorn": {
@@ -18564,7 +17360,7 @@
           "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.0.2.tgz",
           "integrity": "sha1-j67SxBAIchzxEdodMNmVuFvkK+0=",
           "requires": {
-            "object-assign": "4.1.1"
+            "object-assign": "4.x"
           },
           "dependencies": {
             "object-assign": {
@@ -18579,8 +17375,8 @@
           "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
           "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
           "requires": {
-            "co": "4.6.0",
-            "json-stable-stringify": "1.0.1"
+            "co": "^4.6.0",
+            "json-stable-stringify": "^1.0.1"
           }
         },
         "ajv-keywords": {
@@ -18593,9 +17389,9 @@
           "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
           "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
           "requires": {
-            "kind-of": "3.2.2",
-            "longest": "1.0.1",
-            "repeat-string": "1.6.1"
+            "kind-of": "^3.0.2",
+            "longest": "^1.0.1",
+            "repeat-string": "^1.5.2"
           }
         },
         "alphanum-sort": {
@@ -18623,8 +17419,8 @@
           "resolved": "https://registry.npmjs.org/angular-auth0/-/angular-auth0-3.0.0.tgz",
           "integrity": "sha512-wU7CI0YybpHeKfrleUV/LK+0iVHZeWbrpwsj6d+kRUpHetPBdRMWcTsYNLcxFZ04esmIBgmuAyZ6qZSkJHsfpA==",
           "requires": {
-            "angular": "1.7.2",
-            "auth0-js": "9.6.1"
+            "angular": "^1.6.8",
+            "auth0-js": "^9.0.0"
           }
         },
         "angular-cookies": {
@@ -18667,8 +17463,8 @@
           "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
           "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
           "requires": {
-            "micromatch": "2.3.11",
-            "normalize-path": "2.1.1"
+            "micromatch": "^2.1.5",
+            "normalize-path": "^2.0.0"
           }
         },
         "appirio-styles": {
@@ -18676,7 +17472,7 @@
           "resolved": "https://registry.npmjs.org/appirio-styles/-/appirio-styles-0.0.30.tgz",
           "integrity": "sha1-VZx5umDjDW/2Ib2r+RvUeRTTzGE=",
           "requires": {
-            "node-neat": "1.7.2"
+            "node-neat": "~1.7.1-beta1"
           }
         },
         "appirio-tech-api-schemas": {
@@ -18684,7 +17480,181 @@
           "resolved": "https://registry.npmjs.org/appirio-tech-api-schemas/-/appirio-tech-api-schemas-5.0.70.tgz",
           "integrity": "sha1-3RtCG/rw8PSokKRTgHSlVYDQy8s=",
           "requires": {
-            "auto-config-fake-server": "2.0.604"
+            "auto-config-fake-server": "2.x.x"
+          }
+        },
+        "appirio-tech-client-app-layer": {
+          "version": "0.1.3",
+          "resolved": "https://registry.npmjs.org/appirio-tech-client-app-layer/-/appirio-tech-client-app-layer-0.1.3.tgz",
+          "integrity": "sha1-uO5YdHMM2r209RE8NMQvwOsxoOs=",
+          "requires": {
+            "axios": "^0.8.1",
+            "history": "^1.17.0",
+            "html-webpack-plugin": "^1.7.0",
+            "humps": "^0.6.0",
+            "isomorphic-fetch": "^2.1.1",
+            "jwt-decode": "^1.4.0",
+            "lodash": "^4.0.0",
+            "normalizr": "^1.0.0",
+            "q": "^1.4.1",
+            "react": "^0.14.0",
+            "react-dom": "^0.14.0",
+            "react-redux": "^4.0.0",
+            "react-router": "^1.0.3",
+            "redux": "^3.0.0",
+            "redux-form": "^4.1.0",
+            "redux-logger": "^2.4.0",
+            "redux-router": "^1.0.0-beta3",
+            "redux-thunk": "^0.1.0"
+          },
+          "dependencies": {
+            "clean-css": {
+              "version": "3.4.28",
+              "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
+              "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+              "requires": {
+                "commander": "2.8.x",
+                "source-map": "0.4.x"
+              },
+              "dependencies": {
+                "commander": {
+                  "version": "2.8.1",
+                  "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+                  "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+                  "requires": {
+                    "graceful-readlink": ">= 1.0.0"
+                  }
+                }
+              }
+            },
+            "commander": {
+              "version": "2.9.0",
+              "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+              "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+              "requires": {
+                "graceful-readlink": ">= 1.0.0"
+              }
+            },
+            "concat-stream": {
+              "version": "1.5.2",
+              "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+              "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+              "requires": {
+                "inherits": "~2.0.1",
+                "readable-stream": "~2.0.0",
+                "typedarray": "~0.0.5"
+              }
+            },
+            "fbjs": {
+              "version": "0.6.1",
+              "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz",
+              "integrity": "sha1-lja3cF9bqWhNRLcveDISVK/IYPc=",
+              "requires": {
+                "core-js": "^1.0.0",
+                "loose-envify": "^1.0.0",
+                "promise": "^7.0.3",
+                "ua-parser-js": "^0.7.9",
+                "whatwg-fetch": "^0.9.0"
+              }
+            },
+            "he": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/he/-/he-1.0.0.tgz",
+              "integrity": "sha1-baWyZdfyw7XkgHSRaODhWdBXKNo="
+            },
+            "html-minifier": {
+              "version": "1.5.0",
+              "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-1.5.0.tgz",
+              "integrity": "sha1-vrBf2cw0CUWGXBD0Cu30aa9LFTQ=",
+              "requires": {
+                "change-case": "2.3.x",
+                "clean-css": "3.4.x",
+                "commander": "2.9.x",
+                "concat-stream": "1.5.x",
+                "he": "1.0.x",
+                "ncname": "1.0.x",
+                "relateurl": "0.2.x",
+                "uglify-js": "2.6.x"
+              }
+            },
+            "html-webpack-plugin": {
+              "version": "1.7.0",
+              "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-1.7.0.tgz",
+              "integrity": "sha1-zQxzx5G9DIxFsk4wAb4zSmt0KXs=",
+              "requires": {
+                "bluebird": "^3.0.5",
+                "blueimp-tmpl": "^2.5.5",
+                "html-minifier": "^1.0.0",
+                "lodash": "^3.10.1"
+              },
+              "dependencies": {
+                "lodash": {
+                  "version": "3.10.1",
+                  "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+                  "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+                }
+              }
+            },
+            "process-nextick-args": {
+              "version": "1.0.7",
+              "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+              "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+            },
+            "react": {
+              "version": "0.14.9",
+              "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz",
+              "integrity": "sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE=",
+              "requires": {
+                "envify": "^3.0.0",
+                "fbjs": "^0.6.1"
+              }
+            },
+            "react-dom": {
+              "version": "0.14.9",
+              "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.9.tgz",
+              "integrity": "sha1-BQZKPc8PsYgKOyv8nVjFXY2fYpM="
+            },
+            "readable-stream": {
+              "version": "2.0.6",
+              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+              "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+              "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.1",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~1.0.6",
+                "string_decoder": "~0.10.x",
+                "util-deprecate": "~1.0.1"
+              }
+            },
+            "redux-thunk": {
+              "version": "0.1.0",
+              "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-0.1.0.tgz",
+              "integrity": "sha1-jjR2BoCLNb+Kkn30YW9v7RAYJuU="
+            },
+            "string_decoder": {
+              "version": "0.10.31",
+              "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+              "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+            },
+            "uglify-js": {
+              "version": "2.6.4",
+              "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
+              "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
+              "requires": {
+                "async": "~0.2.6",
+                "source-map": "~0.5.1",
+                "uglify-to-browserify": "~1.0.0",
+                "yargs": "~3.10.0"
+              },
+              "dependencies": {
+                "source-map": {
+                  "version": "0.5.7",
+                  "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+                  "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+                }
+              }
+            }
           }
         },
         "appirio-tech-ng-iso-constants": {
@@ -18697,19 +17667,19 @@
           "resolved": "https://registry.npmjs.org/appirio-tech-ng-ui-components/-/appirio-tech-ng-ui-components-2.2.5.tgz",
           "integrity": "sha1-QO2YuvZ3EjzHpxXRhcbI4phfrBI=",
           "requires": {
-            "@uirouter/angularjs": "1.0.18",
-            "angular": "1.4.14",
-            "angular-scroll": "1.0.2",
-            "classnames": "2.2.6",
-            "moment": "2.10.6",
-            "ngreact": "0.2.0",
-            "react": "0.14.9",
-            "react-dom": "0.14.9",
-            "react-input-autosize": "0.6.13",
-            "react-redux": "4.4.9",
-            "react-select": "0.9.1",
-            "redux": "3.7.2",
-            "zepto": "0.0.4"
+            "@uirouter/angularjs": "1.0.x",
+            "angular": "1.4.x",
+            "angular-scroll": "1.0.x",
+            "classnames": "^2.2.1",
+            "moment": "2.10.x",
+            "ngreact": "0.2.x",
+            "react": "0.14.x",
+            "react-dom": "0.14.x",
+            "react-input-autosize": "0.6.x",
+            "react-redux": "^4.1.1",
+            "react-select": "0.9.x",
+            "redux": "^3.1.2",
+            "zepto": "0.0.x"
           },
           "dependencies": {
             "angular": {
@@ -18722,11 +17692,11 @@
               "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz",
               "integrity": "sha1-lja3cF9bqWhNRLcveDISVK/IYPc=",
               "requires": {
-                "core-js": "1.2.7",
-                "loose-envify": "1.3.1",
-                "promise": "7.3.1",
-                "ua-parser-js": "0.7.18",
-                "whatwg-fetch": "0.9.0"
+                "core-js": "^1.0.0",
+                "loose-envify": "^1.0.0",
+                "promise": "^7.0.3",
+                "ua-parser-js": "^0.7.9",
+                "whatwg-fetch": "^0.9.0"
               }
             },
             "react": {
@@ -18734,8 +17704,8 @@
               "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz",
               "integrity": "sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE=",
               "requires": {
-                "envify": "3.4.1",
-                "fbjs": "0.6.1"
+                "envify": "^3.0.0",
+                "fbjs": "^0.6.1"
               }
             },
             "react-dom": {
@@ -18745,41 +17715,205 @@
             }
           }
         },
+        "appirio-tech-react-components": {
+          "version": "github:appirio-tech/react-components#edd4c4bd353b08937b1f59099129b685f9145683",
+          "from": "github:appirio-tech/react-components#feature/connectv2",
+          "requires": {
+            "appirio-tech-api-schemas": "^5.0.69",
+            "appirio-tech-client-app-layer": "^0.1.3",
+            "classnames": "^2.2.3",
+            "coffee-script": "^1.12.7",
+            "coffeescript": "^1.12.7",
+            "formsy-react": "^0.19.5",
+            "isomorphic-fetch": "^2.2.1",
+            "libphonenumber-js": "^1.4.6",
+            "lodash": "^4.0.0",
+            "material-ui": "^0.20.2",
+            "moment": "^2.11.2",
+            "prop-types": "^15.7.2",
+            "react": "^15.3.1",
+            "react-addons-pure-render-mixin": "^15.3.1",
+            "react-addons-update": "^15.3.1",
+            "react-avatar": "^2.2.0",
+            "react-datetime": "^2.0.2",
+            "react-dom": "^15.3.1",
+            "react-dropzone": "^3.5.3",
+            "react-popper": "^0.7.5",
+            "react-redux": "^4.4.5",
+            "react-router-dom": "^4.2.2",
+            "react-select": "^0.9.1",
+            "react-switch-button": "^1.1.2",
+            "react-textarea-autosize": "^5.2.1",
+            "react-transition-group": "^2.2.1",
+            "redux-thunk": "^2.1.0",
+            "uncontrollable": "^4.0.1"
+          },
+          "dependencies": {
+            "fbjs": {
+              "version": "0.6.1",
+              "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz",
+              "integrity": "sha1-lja3cF9bqWhNRLcveDISVK/IYPc=",
+              "requires": {
+                "core-js": "^1.0.0",
+                "loose-envify": "^1.0.0",
+                "promise": "^7.0.3",
+                "ua-parser-js": "^0.7.9",
+                "whatwg-fetch": "^0.9.0"
+              }
+            },
+            "history": {
+              "version": "2.1.2",
+              "resolved": "https://registry.npmjs.org/history/-/history-2.1.2.tgz",
+              "integrity": "sha1-SqLeiXoOSGfkU5hDvm7Nsphr/ew=",
+              "requires": {
+                "deep-equal": "^1.0.0",
+                "invariant": "^2.0.0",
+                "query-string": "^3.0.0",
+                "warning": "^2.0.0"
+              },
+              "dependencies": {
+                "warning": {
+                  "version": "2.1.0",
+                  "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz",
+                  "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=",
+                  "requires": {
+                    "loose-envify": "^1.0.0"
+                  }
+                }
+              }
+            },
+            "hoist-non-react-statics": {
+              "version": "1.2.0",
+              "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz",
+              "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
+            },
+            "loose-envify": {
+              "version": "1.4.0",
+              "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+              "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+              "requires": {
+                "js-tokens": "^3.0.0 || ^4.0.0"
+              }
+            },
+            "moment": {
+              "version": "2.24.0",
+              "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+              "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+            },
+            "object-assign": {
+              "version": "4.1.1",
+              "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+              "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+            },
+            "prop-types": {
+              "version": "15.7.2",
+              "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+              "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+              "requires": {
+                "loose-envify": "^1.4.0",
+                "object-assign": "^4.1.1",
+                "react-is": "^16.8.1"
+              }
+            },
+            "query-string": {
+              "version": "3.0.3",
+              "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz",
+              "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=",
+              "requires": {
+                "strict-uri-encode": "^1.0.0"
+              }
+            },
+            "react-router": {
+              "version": "2.8.1",
+              "resolved": "https://registry.npmjs.org/react-router/-/react-router-2.8.1.tgz",
+              "integrity": "sha1-c+lJH2zrMW0Pd5gpCBhj43juTtc=",
+              "requires": {
+                "history": "^2.1.2",
+                "hoist-non-react-statics": "^1.2.0",
+                "invariant": "^2.2.1",
+                "loose-envify": "^1.2.0",
+                "warning": "^3.0.0"
+              }
+            },
+            "tc-ui": {
+              "version": "git+https://github.com/appirio-tech/tc-ui.git#e577a0e704136f1e9ecce92ce4c0626aab932691",
+              "from": "git+https://github.com/appirio-tech/tc-ui.git#e577a0e704136f1e9ecce92ce4c0626aab932691",
+              "requires": {
+                "classnames": "^2.2.3",
+                "lodash": "^4.0.0",
+                "moment": "^2.11.2",
+                "node-neat": "~1.7.1-beta1",
+                "react": "^0.14.7",
+                "react-datetime": "^2.0.2",
+                "react-dom": "^0.14.7",
+                "react-dropzone": "^3.3.2",
+                "react-redux": "^4.2.1",
+                "react-router": "^2.0.0-rc6",
+                "react-select": "^0.9.1",
+                "redux": "^3.3.1"
+              },
+              "dependencies": {
+                "react": {
+                  "version": "0.14.9",
+                  "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz",
+                  "integrity": "sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE=",
+                  "requires": {
+                    "envify": "^3.0.0",
+                    "fbjs": "^0.6.1"
+                  }
+                },
+                "react-dom": {
+                  "version": "0.14.9",
+                  "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.9.tgz",
+                  "integrity": "sha1-BQZKPc8PsYgKOyv8nVjFXY2fYpM="
+                }
+              }
+            },
+            "warning": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+              "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+              "requires": {
+                "loose-envify": "^1.0.0"
+              }
+            }
+          }
+        },
         "appirio-tech-webpack-config": {
           "version": "0.3.20",
           "resolved": "https://registry.npmjs.org/appirio-tech-webpack-config/-/appirio-tech-webpack-config-0.3.20.tgz",
           "integrity": "sha1-6Z+WPo2AW0dqiSGQuooOTvINu1U=",
           "requires": {
-            "angular-mocks": "1.7.2",
-            "appirio-styles": "0.0.30",
-            "appirio-tech-api-schemas": "5.0.70",
-            "babel-core": "6.26.3",
-            "babel-loader": "6.4.1",
-            "babel-plugin-lodash": "2.3.0",
-            "babel-preset-es2015": "6.24.1",
-            "babel-preset-react": "6.24.1",
-            "babel-preset-stage-2": "6.24.1",
-            "bourbon": "4.3.4",
-            "cjsx-loader": "2.1.0",
-            "coffee-loader": "0.7.3",
-            "coffee-script": "1.12.7",
-            "compression-webpack-plugin": "0.2.0",
-            "css-loader": "0.23.1",
-            "envify": "3.4.1",
-            "extract-text-webpack-plugin": "0.9.1",
-            "file-loader": "0.8.5",
-            "html-webpack-plugin": "2.30.1",
-            "jade": "1.11.0",
+            "angular-mocks": "^1.4.8",
+            "appirio-styles": "0.x.x",
+            "appirio-tech-api-schemas": "^5.0.63",
+            "babel-core": "^6.3.26",
+            "babel-loader": "^6.2.0",
+            "babel-plugin-lodash": "^2.2.1",
+            "babel-preset-es2015": "^6.3.13",
+            "babel-preset-react": "^6.3.13",
+            "babel-preset-stage-2": "^6.5.0",
+            "bourbon": "^4.2.6",
+            "cjsx-loader": "^2.1.0",
+            "coffee-loader": "0.x.x",
+            "coffee-script": "1.x.x",
+            "compression-webpack-plugin": "^0.2.0",
+            "css-loader": "^0.23.0",
+            "envify": "^3.4.0",
+            "extract-text-webpack-plugin": "^0.9.1",
+            "file-loader": "^0.8.5",
+            "html-webpack-plugin": "^2.7.2",
+            "jade": "^1.11.0",
             "jade-html-loader": "0.0.3",
-            "jade-loader": "0.8.0",
-            "jade-react-loader": "1.0.2",
-            "json-loader": "0.5.7",
-            "node-sass": "3.13.1",
-            "sass-loader": "3.2.3",
-            "style-loader": "0.13.2",
-            "transform-loader": "0.2.4",
-            "webpack": "1.15.0",
-            "webpack-dev-server": "1.16.5"
+            "jade-loader": "^0.8.0",
+            "jade-react-loader": "^1.0.0",
+            "json-loader": "^0.5.4",
+            "node-sass": "^3.4.2",
+            "sass-loader": "^3.1.2",
+            "style-loader": "^0.13.0",
+            "transform-loader": "^0.2.3",
+            "webpack": "^1.12.9",
+            "webpack-dev-server": "^1.10.1"
           }
         },
         "aproba": {
@@ -18792,8 +17926,8 @@
           "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
           "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
           "requires": {
-            "delegates": "1.0.0",
-            "readable-stream": "2.3.6"
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
           }
         },
         "argparse": {
@@ -18801,7 +17935,7 @@
           "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
           "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
           "requires": {
-            "sprintf-js": "1.0.3"
+            "sprintf-js": "~1.0.2"
           }
         },
         "arr-diff": {
@@ -18809,7 +17943,7 @@
           "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
           "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
           "requires": {
-            "arr-flatten": "1.1.0"
+            "arr-flatten": "^1.0.1"
           }
         },
         "arr-flatten": {
@@ -18832,7 +17966,7 @@
           "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
           "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
           "requires": {
-            "array-uniq": "1.0.3"
+            "array-uniq": "^1.0.1"
           }
         },
         "array-uniq": {
@@ -18913,18 +18047,33 @@
           "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
           "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
         },
+        "attr-accept": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.3.tgz",
+          "integrity": "sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==",
+          "requires": {
+            "core-js": "^2.5.0"
+          },
+          "dependencies": {
+            "core-js": {
+              "version": "2.6.9",
+              "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+              "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
+            }
+          }
+        },
         "auth0-js": {
           "version": "9.6.1",
           "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-9.6.1.tgz",
           "integrity": "sha1-kI4bxemnxveHsBmtU9dojKqi9I4=",
           "requires": {
-            "base64-js": "1.3.0",
-            "idtoken-verifier": "1.2.0",
-            "js-cookie": "2.2.0",
-            "qs": "6.5.2",
-            "superagent": "3.8.3",
-            "url-join": "1.1.0",
-            "winchan": "0.2.0"
+            "base64-js": "^1.2.0",
+            "idtoken-verifier": "^1.2.0",
+            "js-cookie": "^2.2.0",
+            "qs": "^6.4.0",
+            "superagent": "^3.8.2",
+            "url-join": "^1.1.0",
+            "winchan": "^0.2.0"
           }
         },
         "auto-config-fake-server": {
@@ -18940,12 +18089,12 @@
           "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
           "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
           "requires": {
-            "browserslist": "1.7.7",
-            "caniuse-db": "1.0.30000861",
-            "normalize-range": "0.1.2",
-            "num2fraction": "1.2.2",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "browserslist": "^1.7.6",
+            "caniuse-db": "^1.0.30000634",
+            "normalize-range": "^0.1.2",
+            "num2fraction": "^1.2.2",
+            "postcss": "^5.2.16",
+            "postcss-value-parser": "^3.2.3"
           }
         },
         "aws-sdk": {
@@ -18967,14 +18116,41 @@
           "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
           "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
         },
+        "axios": {
+          "version": "0.8.1",
+          "resolved": "https://registry.npmjs.org/axios/-/axios-0.8.1.tgz",
+          "integrity": "sha1-4Or+wPNGE5Un3Dt5/cv/gDSiQEU=",
+          "requires": {
+            "follow-redirects": "0.0.7"
+          },
+          "dependencies": {
+            "debug": {
+              "version": "2.6.9",
+              "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+              "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+              "requires": {
+                "ms": "2.0.0"
+              }
+            },
+            "follow-redirects": {
+              "version": "0.0.7",
+              "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-0.0.7.tgz",
+              "integrity": "sha1-NLkLqyqRGqNHVx2pDyK9NuzYqRk=",
+              "requires": {
+                "debug": "^2.2.0",
+                "stream-consume": "^0.1.0"
+              }
+            }
+          }
+        },
         "babel-code-frame": {
           "version": "6.26.0",
           "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
           "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
           "requires": {
-            "chalk": "1.1.3",
-            "esutils": "2.0.2",
-            "js-tokens": "3.0.2"
+            "chalk": "^1.1.3",
+            "esutils": "^2.0.2",
+            "js-tokens": "^3.0.2"
           }
         },
         "babel-core": {
@@ -18982,25 +18158,25 @@
           "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
           "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
           "requires": {
-            "babel-code-frame": "6.26.0",
-            "babel-generator": "6.26.1",
-            "babel-helpers": "6.24.1",
-            "babel-messages": "6.23.0",
-            "babel-register": "6.26.0",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0",
-            "babylon": "6.18.0",
-            "convert-source-map": "1.5.1",
-            "debug": "2.6.9",
-            "json5": "0.5.1",
-            "lodash": "4.17.10",
-            "minimatch": "3.0.4",
-            "path-is-absolute": "1.0.1",
-            "private": "0.1.8",
-            "slash": "1.0.0",
-            "source-map": "0.5.7"
+            "babel-code-frame": "^6.26.0",
+            "babel-generator": "^6.26.0",
+            "babel-helpers": "^6.24.1",
+            "babel-messages": "^6.23.0",
+            "babel-register": "^6.26.0",
+            "babel-runtime": "^6.26.0",
+            "babel-template": "^6.26.0",
+            "babel-traverse": "^6.26.0",
+            "babel-types": "^6.26.0",
+            "babylon": "^6.18.0",
+            "convert-source-map": "^1.5.1",
+            "debug": "^2.6.9",
+            "json5": "^0.5.1",
+            "lodash": "^4.17.4",
+            "minimatch": "^3.0.4",
+            "path-is-absolute": "^1.0.1",
+            "private": "^0.1.8",
+            "slash": "^1.0.0",
+            "source-map": "^0.5.7"
           },
           "dependencies": {
             "debug": {
@@ -19023,14 +18199,14 @@
           "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
           "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
           "requires": {
-            "babel-messages": "6.23.0",
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0",
-            "detect-indent": "4.0.0",
-            "jsesc": "1.3.0",
-            "lodash": "4.17.10",
-            "source-map": "0.5.7",
-            "trim-right": "1.0.1"
+            "babel-messages": "^6.23.0",
+            "babel-runtime": "^6.26.0",
+            "babel-types": "^6.26.0",
+            "detect-indent": "^4.0.0",
+            "jsesc": "^1.3.0",
+            "lodash": "^4.17.4",
+            "source-map": "^0.5.7",
+            "trim-right": "^1.0.1"
           },
           "dependencies": {
             "source-map": {
@@ -19045,9 +18221,9 @@
           "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
           "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-builder-binary-assignment-operator-visitor": {
@@ -19055,9 +18231,9 @@
           "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
           "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
           "requires": {
-            "babel-helper-explode-assignable-expression": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-explode-assignable-expression": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-builder-react-jsx": {
@@ -19065,9 +18241,9 @@
           "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
           "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0",
-            "esutils": "2.0.2"
+            "babel-runtime": "^6.26.0",
+            "babel-types": "^6.26.0",
+            "esutils": "^2.0.2"
           }
         },
         "babel-helper-call-delegate": {
@@ -19075,10 +18251,10 @@
           "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
           "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
           "requires": {
-            "babel-helper-hoist-variables": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-hoist-variables": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-define-map": {
@@ -19086,10 +18262,10 @@
           "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
           "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
           "requires": {
-            "babel-helper-function-name": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0",
-            "lodash": "4.17.10"
+            "babel-helper-function-name": "^6.24.1",
+            "babel-runtime": "^6.26.0",
+            "babel-types": "^6.26.0",
+            "lodash": "^4.17.4"
           }
         },
         "babel-helper-explode-assignable-expression": {
@@ -19097,9 +18273,9 @@
           "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
           "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-explode-class": {
@@ -19107,10 +18283,10 @@
           "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
           "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
           "requires": {
-            "babel-helper-bindify-decorators": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-bindify-decorators": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-function-name": {
@@ -19118,11 +18294,11 @@
           "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
           "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
           "requires": {
-            "babel-helper-get-function-arity": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-get-function-arity": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-get-function-arity": {
@@ -19130,8 +18306,8 @@
           "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
           "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-hoist-variables": {
@@ -19139,8 +18315,8 @@
           "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
           "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-optimise-call-expression": {
@@ -19148,8 +18324,8 @@
           "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
           "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-regex": {
@@ -19157,9 +18333,9 @@
           "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
           "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0",
-            "lodash": "4.17.10"
+            "babel-runtime": "^6.26.0",
+            "babel-types": "^6.26.0",
+            "lodash": "^4.17.4"
           }
         },
         "babel-helper-remap-async-to-generator": {
@@ -19167,11 +18343,11 @@
           "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
           "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
           "requires": {
-            "babel-helper-function-name": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-function-name": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helper-replace-supers": {
@@ -19179,12 +18355,12 @@
           "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
           "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
           "requires": {
-            "babel-helper-optimise-call-expression": "6.24.1",
-            "babel-messages": "6.23.0",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-optimise-call-expression": "^6.24.1",
+            "babel-messages": "^6.23.0",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-helpers": {
@@ -19192,8 +18368,8 @@
           "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
           "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1"
           }
         },
         "babel-loader": {
@@ -19201,10 +18377,10 @@
           "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz",
           "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=",
           "requires": {
-            "find-cache-dir": "0.1.1",
-            "loader-utils": "0.2.17",
-            "mkdirp": "0.5.1",
-            "object-assign": "4.1.1"
+            "find-cache-dir": "^0.1.1",
+            "loader-utils": "^0.2.16",
+            "mkdirp": "^0.5.1",
+            "object-assign": "^4.0.1"
           },
           "dependencies": {
             "object-assign": {
@@ -19219,7 +18395,7 @@
           "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
           "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-check-es2015-constants": {
@@ -19227,7 +18403,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
           "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-lodash": {
@@ -19235,7 +18411,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-2.3.0.tgz",
           "integrity": "sha1-QWbI88pSqpW+nhg50kWD5wqFfsI=",
           "requires": {
-            "lodash": "4.17.10"
+            "lodash": "^4.0.0"
           }
         },
         "babel-plugin-syntax-async-functions": {
@@ -19293,9 +18469,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
           "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
           "requires": {
-            "babel-helper-remap-async-to-generator": "6.24.1",
-            "babel-plugin-syntax-async-generators": "6.13.0",
-            "babel-runtime": "6.26.0"
+            "babel-helper-remap-async-to-generator": "^6.24.1",
+            "babel-plugin-syntax-async-generators": "^6.5.0",
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-async-to-generator": {
@@ -19303,9 +18479,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
           "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
           "requires": {
-            "babel-helper-remap-async-to-generator": "6.24.1",
-            "babel-plugin-syntax-async-functions": "6.13.0",
-            "babel-runtime": "6.26.0"
+            "babel-helper-remap-async-to-generator": "^6.24.1",
+            "babel-plugin-syntax-async-functions": "^6.8.0",
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-class-properties": {
@@ -19313,10 +18489,10 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
           "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
           "requires": {
-            "babel-helper-function-name": "6.24.1",
-            "babel-plugin-syntax-class-properties": "6.13.0",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0"
+            "babel-helper-function-name": "^6.24.1",
+            "babel-plugin-syntax-class-properties": "^6.8.0",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1"
           }
         },
         "babel-plugin-transform-decorators": {
@@ -19324,11 +18500,11 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
           "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
           "requires": {
-            "babel-helper-explode-class": "6.24.1",
-            "babel-plugin-syntax-decorators": "6.13.0",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-explode-class": "^6.24.1",
+            "babel-plugin-syntax-decorators": "^6.13.0",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-arrow-functions": {
@@ -19336,7 +18512,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
           "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-block-scoped-functions": {
@@ -19344,7 +18520,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
           "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-block-scoping": {
@@ -19352,11 +18528,11 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
           "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0",
-            "lodash": "4.17.10"
+            "babel-runtime": "^6.26.0",
+            "babel-template": "^6.26.0",
+            "babel-traverse": "^6.26.0",
+            "babel-types": "^6.26.0",
+            "lodash": "^4.17.4"
           }
         },
         "babel-plugin-transform-es2015-classes": {
@@ -19364,15 +18540,15 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
           "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
           "requires": {
-            "babel-helper-define-map": "6.26.0",
-            "babel-helper-function-name": "6.24.1",
-            "babel-helper-optimise-call-expression": "6.24.1",
-            "babel-helper-replace-supers": "6.24.1",
-            "babel-messages": "6.23.0",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-define-map": "^6.24.1",
+            "babel-helper-function-name": "^6.24.1",
+            "babel-helper-optimise-call-expression": "^6.24.1",
+            "babel-helper-replace-supers": "^6.24.1",
+            "babel-messages": "^6.23.0",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-computed-properties": {
@@ -19380,8 +18556,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
           "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-destructuring": {
@@ -19389,7 +18565,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
           "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-duplicate-keys": {
@@ -19397,8 +18573,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
           "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-for-of": {
@@ -19406,7 +18582,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
           "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-function-name": {
@@ -19414,9 +18590,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
           "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
           "requires": {
-            "babel-helper-function-name": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-function-name": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-literals": {
@@ -19424,7 +18600,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
           "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-modules-amd": {
@@ -19432,9 +18608,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
           "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
           "requires": {
-            "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0"
+            "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-modules-commonjs": {
@@ -19442,10 +18618,10 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
           "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
           "requires": {
-            "babel-plugin-transform-strict-mode": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-plugin-transform-strict-mode": "^6.24.1",
+            "babel-runtime": "^6.26.0",
+            "babel-template": "^6.26.0",
+            "babel-types": "^6.26.0"
           }
         },
         "babel-plugin-transform-es2015-modules-systemjs": {
@@ -19453,9 +18629,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
           "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
           "requires": {
-            "babel-helper-hoist-variables": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0"
+            "babel-helper-hoist-variables": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-modules-umd": {
@@ -19463,9 +18639,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
           "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
           "requires": {
-            "babel-plugin-transform-es2015-modules-amd": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0"
+            "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-object-super": {
@@ -19473,8 +18649,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
           "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
           "requires": {
-            "babel-helper-replace-supers": "6.24.1",
-            "babel-runtime": "6.26.0"
+            "babel-helper-replace-supers": "^6.24.1",
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-parameters": {
@@ -19482,12 +18658,12 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
           "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
           "requires": {
-            "babel-helper-call-delegate": "6.24.1",
-            "babel-helper-get-function-arity": "6.24.1",
-            "babel-runtime": "6.26.0",
-            "babel-template": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-call-delegate": "^6.24.1",
+            "babel-helper-get-function-arity": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-template": "^6.24.1",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-shorthand-properties": {
@@ -19495,8 +18671,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
           "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-spread": {
@@ -19504,7 +18680,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
           "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-sticky-regex": {
@@ -19512,9 +18688,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
           "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
           "requires": {
-            "babel-helper-regex": "6.26.0",
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-helper-regex": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-plugin-transform-es2015-template-literals": {
@@ -19522,7 +18698,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
           "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-typeof-symbol": {
@@ -19530,7 +18706,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
           "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-es2015-unicode-regex": {
@@ -19538,9 +18714,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
           "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
           "requires": {
-            "babel-helper-regex": "6.26.0",
-            "babel-runtime": "6.26.0",
-            "regexpu-core": "2.0.0"
+            "babel-helper-regex": "^6.24.1",
+            "babel-runtime": "^6.22.0",
+            "regexpu-core": "^2.0.0"
           }
         },
         "babel-plugin-transform-exponentiation-operator": {
@@ -19548,9 +18724,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
           "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
           "requires": {
-            "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
-            "babel-plugin-syntax-exponentiation-operator": "6.13.0",
-            "babel-runtime": "6.26.0"
+            "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
+            "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-flow-strip-types": {
@@ -19558,8 +18734,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
           "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
           "requires": {
-            "babel-plugin-syntax-flow": "6.18.0",
-            "babel-runtime": "6.26.0"
+            "babel-plugin-syntax-flow": "^6.18.0",
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-object-rest-spread": {
@@ -19567,8 +18743,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
           "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
           "requires": {
-            "babel-plugin-syntax-object-rest-spread": "6.13.0",
-            "babel-runtime": "6.26.0"
+            "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+            "babel-runtime": "^6.26.0"
           }
         },
         "babel-plugin-transform-react-display-name": {
@@ -19576,7 +18752,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",
           "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",
           "requires": {
-            "babel-runtime": "6.26.0"
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-react-jsx": {
@@ -19584,9 +18760,9 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
           "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
           "requires": {
-            "babel-helper-builder-react-jsx": "6.26.0",
-            "babel-plugin-syntax-jsx": "6.18.0",
-            "babel-runtime": "6.26.0"
+            "babel-helper-builder-react-jsx": "^6.24.1",
+            "babel-plugin-syntax-jsx": "^6.8.0",
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-react-jsx-self": {
@@ -19594,8 +18770,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz",
           "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=",
           "requires": {
-            "babel-plugin-syntax-jsx": "6.18.0",
-            "babel-runtime": "6.26.0"
+            "babel-plugin-syntax-jsx": "^6.8.0",
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-react-jsx-source": {
@@ -19603,8 +18779,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz",
           "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=",
           "requires": {
-            "babel-plugin-syntax-jsx": "6.18.0",
-            "babel-runtime": "6.26.0"
+            "babel-plugin-syntax-jsx": "^6.8.0",
+            "babel-runtime": "^6.22.0"
           }
         },
         "babel-plugin-transform-regenerator": {
@@ -19612,7 +18788,7 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
           "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
           "requires": {
-            "regenerator-transform": "0.10.1"
+            "regenerator-transform": "^0.10.0"
           }
         },
         "babel-plugin-transform-strict-mode": {
@@ -19620,8 +18796,8 @@
           "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
           "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0"
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1"
           }
         },
         "babel-polyfill": {
@@ -19629,9 +18805,9 @@
           "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
           "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.10.5"
+            "babel-runtime": "^6.26.0",
+            "core-js": "^2.5.0",
+            "regenerator-runtime": "^0.10.5"
           },
           "dependencies": {
             "core-js": {
@@ -19646,30 +18822,30 @@
           "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
           "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
           "requires": {
-            "babel-plugin-check-es2015-constants": "6.22.0",
-            "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
-            "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
-            "babel-plugin-transform-es2015-block-scoping": "6.26.0",
-            "babel-plugin-transform-es2015-classes": "6.24.1",
-            "babel-plugin-transform-es2015-computed-properties": "6.24.1",
-            "babel-plugin-transform-es2015-destructuring": "6.23.0",
-            "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
-            "babel-plugin-transform-es2015-for-of": "6.23.0",
-            "babel-plugin-transform-es2015-function-name": "6.24.1",
-            "babel-plugin-transform-es2015-literals": "6.22.0",
-            "babel-plugin-transform-es2015-modules-amd": "6.24.1",
-            "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
-            "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
-            "babel-plugin-transform-es2015-modules-umd": "6.24.1",
-            "babel-plugin-transform-es2015-object-super": "6.24.1",
-            "babel-plugin-transform-es2015-parameters": "6.24.1",
-            "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
-            "babel-plugin-transform-es2015-spread": "6.22.0",
-            "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
-            "babel-plugin-transform-es2015-template-literals": "6.22.0",
-            "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
-            "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
-            "babel-plugin-transform-regenerator": "6.26.0"
+            "babel-plugin-check-es2015-constants": "^6.22.0",
+            "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+            "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+            "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
+            "babel-plugin-transform-es2015-classes": "^6.24.1",
+            "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
+            "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+            "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
+            "babel-plugin-transform-es2015-for-of": "^6.22.0",
+            "babel-plugin-transform-es2015-function-name": "^6.24.1",
+            "babel-plugin-transform-es2015-literals": "^6.22.0",
+            "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+            "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+            "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
+            "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
+            "babel-plugin-transform-es2015-object-super": "^6.24.1",
+            "babel-plugin-transform-es2015-parameters": "^6.24.1",
+            "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
+            "babel-plugin-transform-es2015-spread": "^6.22.0",
+            "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
+            "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+            "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+            "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
+            "babel-plugin-transform-regenerator": "^6.24.1"
           }
         },
         "babel-preset-flow": {
@@ -19677,7 +18853,7 @@
           "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz",
           "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=",
           "requires": {
-            "babel-plugin-transform-flow-strip-types": "6.22.0"
+            "babel-plugin-transform-flow-strip-types": "^6.22.0"
           }
         },
         "babel-preset-react": {
@@ -19685,12 +18861,12 @@
           "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz",
           "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=",
           "requires": {
-            "babel-plugin-syntax-jsx": "6.18.0",
-            "babel-plugin-transform-react-display-name": "6.25.0",
-            "babel-plugin-transform-react-jsx": "6.24.1",
-            "babel-plugin-transform-react-jsx-self": "6.22.0",
-            "babel-plugin-transform-react-jsx-source": "6.22.0",
-            "babel-preset-flow": "6.23.0"
+            "babel-plugin-syntax-jsx": "^6.3.13",
+            "babel-plugin-transform-react-display-name": "^6.23.0",
+            "babel-plugin-transform-react-jsx": "^6.24.1",
+            "babel-plugin-transform-react-jsx-self": "^6.22.0",
+            "babel-plugin-transform-react-jsx-source": "^6.22.0",
+            "babel-preset-flow": "^6.23.0"
           }
         },
         "babel-preset-stage-2": {
@@ -19698,10 +18874,10 @@
           "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
           "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
           "requires": {
-            "babel-plugin-syntax-dynamic-import": "6.18.0",
-            "babel-plugin-transform-class-properties": "6.24.1",
-            "babel-plugin-transform-decorators": "6.24.1",
-            "babel-preset-stage-3": "6.24.1"
+            "babel-plugin-syntax-dynamic-import": "^6.18.0",
+            "babel-plugin-transform-class-properties": "^6.24.1",
+            "babel-plugin-transform-decorators": "^6.24.1",
+            "babel-preset-stage-3": "^6.24.1"
           }
         },
         "babel-preset-stage-3": {
@@ -19709,11 +18885,11 @@
           "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
           "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
           "requires": {
-            "babel-plugin-syntax-trailing-function-commas": "6.22.0",
-            "babel-plugin-transform-async-generator-functions": "6.24.1",
-            "babel-plugin-transform-async-to-generator": "6.24.1",
-            "babel-plugin-transform-exponentiation-operator": "6.24.1",
-            "babel-plugin-transform-object-rest-spread": "6.26.0"
+            "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
+            "babel-plugin-transform-async-generator-functions": "^6.24.1",
+            "babel-plugin-transform-async-to-generator": "^6.24.1",
+            "babel-plugin-transform-exponentiation-operator": "^6.24.1",
+            "babel-plugin-transform-object-rest-spread": "^6.22.0"
           }
         },
         "babel-register": {
@@ -19721,13 +18897,13 @@
           "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
           "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
           "requires": {
-            "babel-core": "6.26.3",
-            "babel-runtime": "6.26.0",
-            "core-js": "2.5.7",
-            "home-or-tmp": "2.0.0",
-            "lodash": "4.17.10",
-            "mkdirp": "0.5.1",
-            "source-map-support": "0.4.18"
+            "babel-core": "^6.26.0",
+            "babel-runtime": "^6.26.0",
+            "core-js": "^2.5.0",
+            "home-or-tmp": "^2.0.0",
+            "lodash": "^4.17.4",
+            "mkdirp": "^0.5.1",
+            "source-map-support": "^0.4.15"
           },
           "dependencies": {
             "core-js": {
@@ -19742,8 +18918,8 @@
           "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           },
           "dependencies": {
             "core-js": {
@@ -19763,11 +18939,11 @@
           "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
           "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-traverse": "6.26.0",
-            "babel-types": "6.26.0",
-            "babylon": "6.18.0",
-            "lodash": "4.17.10"
+            "babel-runtime": "^6.26.0",
+            "babel-traverse": "^6.26.0",
+            "babel-types": "^6.26.0",
+            "babylon": "^6.18.0",
+            "lodash": "^4.17.4"
           }
         },
         "babel-traverse": {
@@ -19775,15 +18951,15 @@
           "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
           "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
           "requires": {
-            "babel-code-frame": "6.26.0",
-            "babel-messages": "6.23.0",
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0",
-            "babylon": "6.18.0",
-            "debug": "2.6.9",
-            "globals": "9.18.0",
-            "invariant": "2.2.4",
-            "lodash": "4.17.10"
+            "babel-code-frame": "^6.26.0",
+            "babel-messages": "^6.23.0",
+            "babel-runtime": "^6.26.0",
+            "babel-types": "^6.26.0",
+            "babylon": "^6.18.0",
+            "debug": "^2.6.8",
+            "globals": "^9.18.0",
+            "invariant": "^2.2.2",
+            "lodash": "^4.17.4"
           },
           "dependencies": {
             "debug": {
@@ -19801,10 +18977,10 @@
           "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
           "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "esutils": "2.0.2",
-            "lodash": "4.17.10",
-            "to-fast-properties": "1.0.3"
+            "babel-runtime": "^6.26.0",
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.4",
+            "to-fast-properties": "^1.0.3"
           }
         },
         "babylon": {
@@ -19838,7 +19014,7 @@
           "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
           "optional": true,
           "requires": {
-            "tweetnacl": "0.14.5"
+            "tweetnacl": "^0.14.3"
           }
         },
         "big.js": {
@@ -19856,7 +19032,7 @@
           "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
           "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
           "requires": {
-            "inherits": "2.0.3"
+            "inherits": "~2.0.0"
           }
         },
         "bluebird": {
@@ -19864,21 +19040,26 @@
           "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
           "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
         },
+        "blueimp-tmpl": {
+          "version": "2.5.7",
+          "resolved": "https://registry.npmjs.org/blueimp-tmpl/-/blueimp-tmpl-2.5.7.tgz",
+          "integrity": "sha1-M/sSwTnWVRKuQK+9ji3vjZ25ZJA="
+        },
         "body-parser": {
           "version": "1.18.2",
           "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
           "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
           "requires": {
             "bytes": "3.0.0",
-            "content-type": "1.0.4",
+            "content-type": "~1.0.4",
             "debug": "2.6.9",
-            "depd": "1.1.2",
-            "http-errors": "1.6.3",
+            "depd": "~1.1.1",
+            "http-errors": "~1.6.2",
             "iconv-lite": "0.4.19",
-            "on-finished": "2.3.0",
+            "on-finished": "~2.3.0",
             "qs": "6.5.1",
             "raw-body": "2.3.2",
-            "type-is": "1.6.16"
+            "type-is": "~1.6.15"
           },
           "dependencies": {
             "debug": {
@@ -19911,7 +19092,7 @@
           "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
           "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
           "requires": {
-            "hoek": "2.16.3"
+            "hoek": "2.x.x"
           }
         },
         "bourbon": {
@@ -19924,12 +19105,17 @@
           "resolved": "https://registry.npmjs.org/bourbon-neat/-/bourbon-neat-1.7.2.tgz",
           "integrity": "sha1-oiixJ0R53iR20yszFTEHylBTzz0="
         },
+        "bowser": {
+          "version": "1.9.4",
+          "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz",
+          "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ=="
+        },
         "brace-expansion": {
           "version": "1.1.11",
           "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
           "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
           "requires": {
-            "balanced-match": "1.0.0",
+            "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
           }
         },
@@ -19938,9 +19124,9 @@
           "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
           "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
           "requires": {
-            "expand-range": "1.8.2",
-            "preserve": "0.2.0",
-            "repeat-element": "1.1.2"
+            "expand-range": "^1.8.1",
+            "preserve": "^0.2.0",
+            "repeat-element": "^1.1.2"
           }
         },
         "browserify-aes": {
@@ -19948,7 +19134,7 @@
           "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz",
           "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=",
           "requires": {
-            "inherits": "2.0.3"
+            "inherits": "^2.0.1"
           }
         },
         "browserify-zlib": {
@@ -19956,7 +19142,7 @@
           "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
           "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
           "requires": {
-            "pako": "0.2.9"
+            "pako": "~0.2.0"
           }
         },
         "browserslist": {
@@ -19964,8 +19150,8 @@
           "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
           "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
           "requires": {
-            "caniuse-db": "1.0.30000861",
-            "electron-to-chromium": "1.3.50"
+            "caniuse-db": "^1.0.30000639",
+            "electron-to-chromium": "^1.2.7"
           }
         },
         "buffer": {
@@ -19973,9 +19159,9 @@
           "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
           "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
           "requires": {
-            "base64-js": "1.3.0",
-            "ieee754": "1.1.12",
-            "isarray": "1.0.0"
+            "base64-js": "^1.0.2",
+            "ieee754": "^1.1.4",
+            "isarray": "^1.0.0"
           }
         },
         "buffer-from": {
@@ -20003,7 +19189,7 @@
           "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
           "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
           "requires": {
-            "callsites": "0.2.0"
+            "callsites": "^0.2.0"
           }
         },
         "callsites": {
@@ -20016,8 +19202,8 @@
           "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
           "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
           "requires": {
-            "no-case": "2.3.2",
-            "upper-case": "1.1.3"
+            "no-case": "^2.2.0",
+            "upper-case": "^1.1.1"
           }
         },
         "camelcase": {
@@ -20030,8 +19216,8 @@
           "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
           "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
           "requires": {
-            "camelcase": "2.1.1",
-            "map-obj": "1.0.1"
+            "camelcase": "^2.0.0",
+            "map-obj": "^1.0.0"
           },
           "dependencies": {
             "camelcase": {
@@ -20046,10 +19232,10 @@
           "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
           "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
           "requires": {
-            "browserslist": "1.7.7",
-            "caniuse-db": "1.0.30000861",
-            "lodash.memoize": "4.1.2",
-            "lodash.uniq": "4.5.0"
+            "browserslist": "^1.3.6",
+            "caniuse-db": "^1.0.30000529",
+            "lodash.memoize": "^4.1.2",
+            "lodash.uniq": "^4.5.0"
           }
         },
         "caniuse-db": {
@@ -20067,12 +19253,12 @@
           "resolved": "https://registry.npmjs.org/cdnizer/-/cdnizer-1.1.6.tgz",
           "integrity": "sha1-wVGF0b7UKwPppFqp+lWObYcr0Sw=",
           "requires": {
-            "cdnjs-cdn-data": "0.1.2",
-            "google-cdn-data": "0.1.25",
-            "jsdelivr-cdn-data": "0.1.1",
-            "lodash": "2.4.2",
-            "minimatch": "3.0.4",
-            "nomnom": "1.8.1"
+            "cdnjs-cdn-data": "^0.1.1",
+            "google-cdn-data": "^0.1.6",
+            "jsdelivr-cdn-data": "^0.1.1",
+            "lodash": "~2.4.1",
+            "minimatch": "^3.0.2",
+            "nomnom": "^1.8.0"
           },
           "dependencies": {
             "lodash": {
@@ -20087,7 +19273,7 @@
           "resolved": "https://registry.npmjs.org/cdnjs-cdn-data/-/cdnjs-cdn-data-0.1.2.tgz",
           "integrity": "sha1-hl00uk5I3Rtz/WaOJKYaWt+biyE=",
           "requires": {
-            "semver": "5.0.3"
+            "semver": "~5.0.1"
           },
           "dependencies": {
             "semver": {
@@ -20102,41 +19288,98 @@
           "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
           "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
           "requires": {
-            "align-text": "0.1.4",
-            "lazy-cache": "1.0.4"
+            "align-text": "^0.1.3",
+            "lazy-cache": "^1.0.3"
           }
         },
+        "chain-function": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.1.tgz",
+          "integrity": "sha512-SxltgMwL9uCko5/ZCLiyG2B7R9fY4pDZUw7hJ4MhirdjBLosoDqkWABi3XMucddHdLiFJMb7PD2MZifZriuMTg=="
+        },
         "chalk": {
           "version": "1.1.3",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "requires": {
-            "ansi-styles": "2.2.1",
-            "escape-string-regexp": "1.0.5",
-            "has-ansi": "2.0.0",
-            "strip-ansi": "3.0.1",
-            "supports-color": "2.0.0"
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
           }
         },
-        "character-parser": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
-          "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
-        },
-        "chokidar": {
+        "change-case": {
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.3.1.tgz",
+          "integrity": "sha1-LE/ePwY7tB0AzWjg1aCdthy+iU8=",
+          "requires": {
+            "camel-case": "^1.1.1",
+            "constant-case": "^1.1.0",
+            "dot-case": "^1.1.0",
+            "is-lower-case": "^1.1.0",
+            "is-upper-case": "^1.1.0",
+            "lower-case": "^1.1.1",
+            "lower-case-first": "^1.0.0",
+            "param-case": "^1.1.0",
+            "pascal-case": "^1.1.0",
+            "path-case": "^1.1.0",
+            "sentence-case": "^1.1.1",
+            "snake-case": "^1.1.0",
+            "swap-case": "^1.1.0",
+            "title-case": "^1.1.0",
+            "upper-case": "^1.1.1",
+            "upper-case-first": "^1.1.0"
+          },
+          "dependencies": {
+            "camel-case": {
+              "version": "1.2.2",
+              "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz",
+              "integrity": "sha1-Gsp8TRlTWaLOmVV5NDPG5VQlEfI=",
+              "requires": {
+                "sentence-case": "^1.1.1",
+                "upper-case": "^1.1.1"
+              }
+            },
+            "param-case": {
+              "version": "1.1.2",
+              "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz",
+              "integrity": "sha1-3LCRpDwlm5Io8cNB57akTqC/l0M=",
+              "requires": {
+                "sentence-case": "^1.1.2"
+              }
+            }
+          }
+        },
+        "change-emitter": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz",
+          "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU="
+        },
+        "character-parser": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz",
+          "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY="
+        },
+        "charenc": {
+          "version": "0.0.2",
+          "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+          "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
+        },
+        "chokidar": {
           "version": "1.7.0",
           "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
           "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
           "requires": {
-            "anymatch": "1.3.2",
-            "async-each": "1.0.1",
-            "fsevents": "1.2.4",
-            "glob-parent": "2.0.0",
-            "inherits": "2.0.3",
-            "is-binary-path": "1.0.1",
-            "is-glob": "2.0.1",
-            "path-is-absolute": "1.0.1",
-            "readdirp": "2.1.0"
+            "anymatch": "^1.3.0",
+            "async-each": "^1.0.0",
+            "fsevents": "^1.0.0",
+            "glob-parent": "^2.0.0",
+            "inherits": "^2.0.1",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^2.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.0.0"
           }
         },
         "circular-json": {
@@ -20149,8 +19392,8 @@
           "resolved": "https://registry.npmjs.org/cjsx-loader/-/cjsx-loader-2.1.0.tgz",
           "integrity": "sha1-14OVnJfX4dN0tE2qvvZcoIs6Ozs=",
           "requires": {
-            "coffee-react-transform": "3.3.0",
-            "loader-utils": "0.2.17"
+            "coffee-react-transform": "^3.0.0",
+            "loader-utils": "0.2.x"
           }
         },
         "clap": {
@@ -20158,7 +19401,7 @@
           "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
           "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
           "requires": {
-            "chalk": "1.1.3"
+            "chalk": "^1.1.3"
           }
         },
         "classnames": {
@@ -20171,7 +19414,7 @@
           "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
           "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=",
           "requires": {
-            "source-map": "0.5.7"
+            "source-map": "0.5.x"
           },
           "dependencies": {
             "source-map": {
@@ -20186,7 +19429,7 @@
           "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
           "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
           "requires": {
-            "restore-cursor": "1.0.1"
+            "restore-cursor": "^1.0.1"
           }
         },
         "cli-width": {
@@ -20199,8 +19442,8 @@
           "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
           "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
           "requires": {
-            "center-align": "0.1.3",
-            "right-align": "0.1.3",
+            "center-align": "^0.1.1",
+            "right-align": "^0.1.1",
             "wordwrap": "0.0.2"
           },
           "dependencies": {
@@ -20226,7 +19469,7 @@
           "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
           "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
           "requires": {
-            "q": "1.5.1"
+            "q": "^1.1.2"
           }
         },
         "code-point-at": {
@@ -20239,7 +19482,7 @@
           "resolved": "https://registry.npmjs.org/coffee-loader/-/coffee-loader-0.7.3.tgz",
           "integrity": "sha1-+tvG79b8fsyIxbMEaiwpIGa8tUo=",
           "requires": {
-            "loader-utils": "1.1.0"
+            "loader-utils": "^1.0.2"
           },
           "dependencies": {
             "loader-utils": {
@@ -20247,9 +19490,9 @@
               "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
               "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
               "requires": {
-                "big.js": "3.2.0",
-                "emojis-list": "2.1.0",
-                "json5": "0.5.1"
+                "big.js": "^3.1.3",
+                "emojis-list": "^2.0.0",
+                "json5": "^0.5.0"
               }
             }
           }
@@ -20264,14 +19507,19 @@
           "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
           "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw=="
         },
+        "coffeescript": {
+          "version": "1.12.7",
+          "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz",
+          "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA=="
+        },
         "color": {
           "version": "0.11.4",
           "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
           "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
           "requires": {
-            "clone": "1.0.4",
-            "color-convert": "1.9.2",
-            "color-string": "0.3.0"
+            "clone": "^1.0.2",
+            "color-convert": "^1.3.0",
+            "color-string": "^0.3.0"
           }
         },
         "color-convert": {
@@ -20292,7 +19540,7 @@
           "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
           "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
           "requires": {
-            "color-name": "1.1.1"
+            "color-name": "^1.0.0"
           }
         },
         "colormin": {
@@ -20300,9 +19548,9 @@
           "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
           "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
           "requires": {
-            "color": "0.11.4",
+            "color": "^0.11.0",
             "css-color-names": "0.0.4",
-            "has": "1.0.3"
+            "has": "^1.0.1"
           }
         },
         "colors": {
@@ -20315,7 +19563,7 @@
           "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
           "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
           "requires": {
-            "delayed-stream": "1.0.0"
+            "delayed-stream": "~1.0.0"
           }
         },
         "commander": {
@@ -20333,15 +19581,15 @@
           "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
           "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=",
           "requires": {
-            "commander": "2.16.0",
-            "detective": "4.7.1",
-            "glob": "5.0.15",
-            "graceful-fs": "4.1.11",
-            "iconv-lite": "0.4.23",
-            "mkdirp": "0.5.1",
-            "private": "0.1.8",
-            "q": "1.5.1",
-            "recast": "0.11.23"
+            "commander": "^2.5.0",
+            "detective": "^4.3.1",
+            "glob": "^5.0.15",
+            "graceful-fs": "^4.1.2",
+            "iconv-lite": "^0.4.5",
+            "mkdirp": "^0.5.0",
+            "private": "^0.1.6",
+            "q": "^1.1.2",
+            "recast": "^0.11.17"
           }
         },
         "component-classes": {
@@ -20367,7 +19615,7 @@
           "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz",
           "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=",
           "requires": {
-            "mime-db": "1.34.0"
+            "mime-db": ">= 1.34.0 < 2"
           },
           "dependencies": {
             "mime-db": {
@@ -20382,13 +19630,13 @@
           "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz",
           "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=",
           "requires": {
-            "accepts": "1.3.5",
+            "accepts": "~1.3.4",
             "bytes": "3.0.0",
-            "compressible": "2.0.14",
+            "compressible": "~2.0.13",
             "debug": "2.6.9",
-            "on-headers": "1.0.1",
+            "on-headers": "~1.0.1",
             "safe-buffer": "5.1.1",
-            "vary": "1.1.2"
+            "vary": "~1.1.2"
           },
           "dependencies": {
             "debug": {
@@ -20411,7 +19659,7 @@
           "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-0.2.0.tgz",
           "integrity": "sha1-zkVTpHitScvVN0yqopLJ8WvrBV8=",
           "requires": {
-            "async": "0.2.10"
+            "async": "0.2.x"
           }
         },
         "concat-map": {
@@ -20424,10 +19672,10 @@
           "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
           "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
           "requires": {
-            "buffer-from": "1.1.0",
-            "inherits": "2.0.3",
-            "readable-stream": "2.3.6",
-            "typedarray": "0.0.6"
+            "buffer-from": "^1.0.0",
+            "inherits": "^2.0.3",
+            "readable-stream": "^2.2.2",
+            "typedarray": "^0.0.6"
           }
         },
         "connect-history-api-fallback": {
@@ -20440,7 +19688,7 @@
           "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
           "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
           "requires": {
-            "date-now": "0.1.4"
+            "date-now": "^0.1.4"
           }
         },
         "console-control-strings": {
@@ -20448,12 +19696,21 @@
           "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
           "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
         },
+        "constant-case": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz",
+          "integrity": "sha1-jsLKW6ND4Aqjjb9OIA/VrJB+/WM=",
+          "requires": {
+            "snake-case": "^1.1.0",
+            "upper-case": "^1.1.1"
+          }
+        },
         "constantinople": {
           "version": "3.0.2",
           "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
           "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=",
           "requires": {
-            "acorn": "2.7.0"
+            "acorn": "^2.1.0"
           },
           "dependencies": {
             "acorn": {
@@ -20513,9 +19770,9 @@
           "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz",
           "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==",
           "requires": {
-            "fbjs": "0.8.17",
-            "loose-envify": "1.3.1",
-            "object-assign": "4.1.1"
+            "fbjs": "^0.8.9",
+            "loose-envify": "^1.3.1",
+            "object-assign": "^4.1.1"
           },
           "dependencies": {
             "fbjs": {
@@ -20523,13 +19780,13 @@
               "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
               "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
               "requires": {
-                "core-js": "1.2.7",
-                "isomorphic-fetch": "2.2.1",
-                "loose-envify": "1.3.1",
-                "object-assign": "4.1.1",
-                "promise": "7.3.1",
-                "setimmediate": "1.0.5",
-                "ua-parser-js": "0.7.18"
+                "core-js": "^1.0.0",
+                "isomorphic-fetch": "^2.1.1",
+                "loose-envify": "^1.0.0",
+                "object-assign": "^4.1.0",
+                "promise": "^7.1.1",
+                "setimmediate": "^1.0.5",
+                "ua-parser-js": "^0.7.18"
               }
             },
             "object-assign": {
@@ -20544,16 +19801,21 @@
           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
           "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
           "requires": {
-            "lru-cache": "4.1.3",
-            "which": "1.3.1"
+            "lru-cache": "^4.0.1",
+            "which": "^1.2.9"
           }
         },
+        "crypt": {
+          "version": "0.0.2",
+          "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+          "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
+        },
         "cryptiles": {
           "version": "2.0.5",
           "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
           "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
           "requires": {
-            "boom": "2.10.1"
+            "boom": "2.x.x"
           }
         },
         "crypto-browserify": {
@@ -20586,8 +19848,8 @@
           "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.4.1.tgz",
           "integrity": "sha1-W4gTEl3g+7uwu+G0cq6EIhRpt6g=",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "component-classes": "1.2.6"
+            "babel-runtime": "6.x",
+            "component-classes": "^1.2.5"
           }
         },
         "css-color-names": {
@@ -20595,22 +19857,38 @@
           "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
           "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
         },
+        "css-in-js-utils": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz",
+          "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==",
+          "requires": {
+            "hyphenate-style-name": "^1.0.2",
+            "isobject": "^3.0.1"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "3.0.1",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+              "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+            }
+          }
+        },
         "css-loader": {
           "version": "0.23.1",
           "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.23.1.tgz",
           "integrity": "sha1-n6I/K1wJZSNZEK1ezvO4o2OQ/lA=",
           "requires": {
-            "css-selector-tokenizer": "0.5.4",
-            "cssnano": "3.10.0",
-            "loader-utils": "0.2.17",
-            "lodash.camelcase": "3.0.1",
-            "object-assign": "4.1.1",
-            "postcss": "5.2.18",
-            "postcss-modules-extract-imports": "1.1.0",
-            "postcss-modules-local-by-default": "1.2.0",
-            "postcss-modules-scope": "1.1.0",
-            "postcss-modules-values": "1.3.0",
-            "source-list-map": "0.1.8"
+            "css-selector-tokenizer": "^0.5.1",
+            "cssnano": ">=2.6.1 <4",
+            "loader-utils": "~0.2.2",
+            "lodash.camelcase": "^3.0.1",
+            "object-assign": "^4.0.1",
+            "postcss": "^5.0.6",
+            "postcss-modules-extract-imports": "^1.0.0",
+            "postcss-modules-local-by-default": "^1.0.1",
+            "postcss-modules-scope": "^1.0.0",
+            "postcss-modules-values": "^1.1.0",
+            "source-list-map": "^0.1.4"
           },
           "dependencies": {
             "object-assign": {
@@ -20630,10 +19908,10 @@
           "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
           "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
           "requires": {
-            "boolbase": "1.0.0",
-            "css-what": "2.1.0",
+            "boolbase": "~1.0.0",
+            "css-what": "2.1",
             "domutils": "1.5.1",
-            "nth-check": "1.0.1"
+            "nth-check": "~1.0.1"
           }
         },
         "css-selector-tokenizer": {
@@ -20641,8 +19919,8 @@
           "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.5.4.tgz",
           "integrity": "sha1-E5uv00o1/QwUKEhwSeBpnm9qLCE=",
           "requires": {
-            "cssesc": "0.1.0",
-            "fastparse": "1.1.1"
+            "cssesc": "^0.1.0",
+            "fastparse": "^1.1.1"
           }
         },
         "css-stringify": {
@@ -20665,38 +19943,38 @@
           "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
           "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
           "requires": {
-            "autoprefixer": "6.7.7",
-            "decamelize": "1.2.0",
-            "defined": "1.0.0",
-            "has": "1.0.3",
-            "object-assign": "4.1.1",
-            "postcss": "5.2.18",
-            "postcss-calc": "5.3.1",
-            "postcss-colormin": "2.2.2",
-            "postcss-convert-values": "2.6.1",
-            "postcss-discard-comments": "2.0.4",
-            "postcss-discard-duplicates": "2.1.0",
-            "postcss-discard-empty": "2.1.0",
-            "postcss-discard-overridden": "0.1.1",
-            "postcss-discard-unused": "2.2.3",
-            "postcss-filter-plugins": "2.0.3",
-            "postcss-merge-idents": "2.1.7",
-            "postcss-merge-longhand": "2.0.2",
-            "postcss-merge-rules": "2.1.2",
-            "postcss-minify-font-values": "1.0.5",
-            "postcss-minify-gradients": "1.0.5",
-            "postcss-minify-params": "1.2.2",
-            "postcss-minify-selectors": "2.1.1",
-            "postcss-normalize-charset": "1.1.1",
-            "postcss-normalize-url": "3.0.8",
-            "postcss-ordered-values": "2.2.3",
-            "postcss-reduce-idents": "2.4.0",
-            "postcss-reduce-initial": "1.0.1",
-            "postcss-reduce-transforms": "1.0.4",
-            "postcss-svgo": "2.1.6",
-            "postcss-unique-selectors": "2.0.2",
-            "postcss-value-parser": "3.3.0",
-            "postcss-zindex": "2.2.0"
+            "autoprefixer": "^6.3.1",
+            "decamelize": "^1.1.2",
+            "defined": "^1.0.0",
+            "has": "^1.0.1",
+            "object-assign": "^4.0.1",
+            "postcss": "^5.0.14",
+            "postcss-calc": "^5.2.0",
+            "postcss-colormin": "^2.1.8",
+            "postcss-convert-values": "^2.3.4",
+            "postcss-discard-comments": "^2.0.4",
+            "postcss-discard-duplicates": "^2.0.1",
+            "postcss-discard-empty": "^2.0.1",
+            "postcss-discard-overridden": "^0.1.1",
+            "postcss-discard-unused": "^2.2.1",
+            "postcss-filter-plugins": "^2.0.0",
+            "postcss-merge-idents": "^2.1.5",
+            "postcss-merge-longhand": "^2.0.1",
+            "postcss-merge-rules": "^2.0.3",
+            "postcss-minify-font-values": "^1.0.2",
+            "postcss-minify-gradients": "^1.0.1",
+            "postcss-minify-params": "^1.0.4",
+            "postcss-minify-selectors": "^2.0.4",
+            "postcss-normalize-charset": "^1.1.0",
+            "postcss-normalize-url": "^3.0.7",
+            "postcss-ordered-values": "^2.1.0",
+            "postcss-reduce-idents": "^2.2.2",
+            "postcss-reduce-initial": "^1.0.0",
+            "postcss-reduce-transforms": "^1.0.3",
+            "postcss-svgo": "^2.1.1",
+            "postcss-unique-selectors": "^2.0.2",
+            "postcss-value-parser": "^3.2.3",
+            "postcss-zindex": "^2.0.1"
           },
           "dependencies": {
             "object-assign": {
@@ -20711,8 +19989,8 @@
           "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
           "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
           "requires": {
-            "clap": "1.2.3",
-            "source-map": "0.5.7"
+            "clap": "^1.0.9",
+            "source-map": "^0.5.3"
           },
           "dependencies": {
             "source-map": {
@@ -20727,7 +20005,7 @@
           "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
           "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
           "requires": {
-            "array-find-index": "1.0.2"
+            "array-find-index": "^1.0.1"
           }
         },
         "d": {
@@ -20735,7 +20013,7 @@
           "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
           "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
           "requires": {
-            "es5-ext": "0.10.45"
+            "es5-ext": "^0.10.9"
           }
         },
         "dashdash": {
@@ -20743,7 +20021,7 @@
           "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
           "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
           "requires": {
-            "assert-plus": "1.0.0"
+            "assert-plus": "^1.0.0"
           },
           "dependencies": {
             "assert-plus": {
@@ -20771,6 +20049,16 @@
           "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
           "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
         },
+        "deep-diff": {
+          "version": "0.3.4",
+          "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.4.tgz",
+          "integrity": "sha1-qsXDmVIjar5fA3ojSQYLoBsArkg="
+        },
+        "deep-equal": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+          "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+        },
         "deep-is": {
           "version": "0.1.3",
           "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
@@ -20786,13 +20074,13 @@
           "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
           "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
           "requires": {
-            "globby": "5.0.0",
-            "is-path-cwd": "1.0.0",
-            "is-path-in-cwd": "1.0.1",
-            "object-assign": "4.1.1",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1",
-            "rimraf": "2.6.2"
+            "globby": "^5.0.0",
+            "is-path-cwd": "^1.0.0",
+            "is-path-in-cwd": "^1.0.0",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "rimraf": "^2.2.8"
           },
           "dependencies": {
             "object-assign": {
@@ -20827,7 +20115,7 @@
           "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
           "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
           "requires": {
-            "repeating": "2.0.1"
+            "repeating": "^2.0.0"
           }
         },
         "detective": {
@@ -20835,8 +20123,8 @@
           "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
           "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
           "requires": {
-            "acorn": "5.7.1",
-            "defined": "1.0.0"
+            "acorn": "^5.2.1",
+            "defined": "^1.0.0"
           }
         },
         "doctrine": {
@@ -20844,8 +20132,8 @@
           "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
           "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
           "requires": {
-            "esutils": "2.0.2",
-            "isarray": "1.0.0"
+            "esutils": "^2.0.2",
+            "isarray": "^1.0.0"
           }
         },
         "dom-align": {
@@ -20858,7 +20146,7 @@
           "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz",
           "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
           "requires": {
-            "utila": "0.3.3"
+            "utila": "~0.3"
           },
           "dependencies": {
             "utila": {
@@ -20868,13 +20156,21 @@
             }
           }
         },
+        "dom-helpers": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
+          "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
+          "requires": {
+            "@babel/runtime": "^7.1.2"
+          }
+        },
         "dom-serializer": {
           "version": "0.1.0",
           "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
           "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
           "requires": {
-            "domelementtype": "1.1.3",
-            "entities": "1.1.1"
+            "domelementtype": "~1.1.1",
+            "entities": "~1.1.1"
           },
           "dependencies": {
             "domelementtype": {
@@ -20899,7 +20195,7 @@
           "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz",
           "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
           "requires": {
-            "domelementtype": "1.3.0"
+            "domelementtype": "1"
           }
         },
         "domutils": {
@@ -20907,8 +20203,16 @@
           "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
           "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
           "requires": {
-            "dom-serializer": "0.1.0",
-            "domelementtype": "1.3.0"
+            "dom-serializer": "0",
+            "domelementtype": "1"
+          }
+        },
+        "dot-case": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz",
+          "integrity": "sha1-HnOCaQDeKNbeVIC8HeMdCEKwa+w=",
+          "requires": {
+            "sentence-case": "^1.1.2"
           }
         },
         "duplexer2": {
@@ -20916,7 +20220,7 @@
           "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
           "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
           "requires": {
-            "readable-stream": "1.1.14"
+            "readable-stream": "~1.1.9"
           },
           "dependencies": {
             "isarray": {
@@ -20929,10 +20233,10 @@
               "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
               "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
               "requires": {
-                "core-util-is": "1.0.2",
-                "inherits": "2.0.3",
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.1",
                 "isarray": "0.0.1",
-                "string_decoder": "0.10.31"
+                "string_decoder": "~0.10.x"
               }
             },
             "string_decoder": {
@@ -20948,7 +20252,7 @@
           "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
           "optional": true,
           "requires": {
-            "jsbn": "0.1.1"
+            "jsbn": "~0.1.0"
           }
         },
         "ee-first": {
@@ -20976,7 +20280,7 @@
           "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
           "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
           "requires": {
-            "iconv-lite": "0.4.23"
+            "iconv-lite": "~0.4.13"
           }
         },
         "enhanced-resolve": {
@@ -20984,9 +20288,9 @@
           "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
           "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=",
           "requires": {
-            "graceful-fs": "4.1.11",
-            "memory-fs": "0.2.0",
-            "tapable": "0.1.10"
+            "graceful-fs": "^4.1.2",
+            "memory-fs": "^0.2.0",
+            "tapable": "^0.1.8"
           },
           "dependencies": {
             "memory-fs": {
@@ -21011,8 +20315,8 @@
           "resolved": "https://registry.npmjs.org/envify/-/envify-3.4.1.tgz",
           "integrity": "sha1-1xIjKejfFoi6dxsSUBkXyc5cvOg=",
           "requires": {
-            "jstransform": "11.0.3",
-            "through": "2.3.8"
+            "jstransform": "^11.0.3",
+            "through": "~2.3.4"
           }
         },
         "errno": {
@@ -21020,7 +20324,7 @@
           "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
           "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
           "requires": {
-            "prr": "1.0.1"
+            "prr": "~1.0.1"
           }
         },
         "error-ex": {
@@ -21028,7 +20332,7 @@
           "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
           "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
           "requires": {
-            "is-arrayish": "0.2.1"
+            "is-arrayish": "^0.2.1"
           }
         },
         "es5-ext": {
@@ -21036,9 +20340,9 @@
           "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
           "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
           "requires": {
-            "es6-iterator": "2.0.3",
-            "es6-symbol": "3.1.1",
-            "next-tick": "1.0.0"
+            "es6-iterator": "~2.0.3",
+            "es6-symbol": "~3.1.1",
+            "next-tick": "1"
           }
         },
         "es6-iterator": {
@@ -21046,9 +20350,9 @@
           "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
           "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
           "requires": {
-            "d": "1.0.0",
-            "es5-ext": "0.10.45",
-            "es6-symbol": "3.1.1"
+            "d": "1",
+            "es5-ext": "^0.10.35",
+            "es6-symbol": "^3.1.1"
           }
         },
         "es6-map": {
@@ -21056,12 +20360,12 @@
           "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
           "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
           "requires": {
-            "d": "1.0.0",
-            "es5-ext": "0.10.45",
-            "es6-iterator": "2.0.3",
-            "es6-set": "0.1.5",
-            "es6-symbol": "3.1.1",
-            "event-emitter": "0.3.5"
+            "d": "1",
+            "es5-ext": "~0.10.14",
+            "es6-iterator": "~2.0.1",
+            "es6-set": "~0.1.5",
+            "es6-symbol": "~3.1.1",
+            "event-emitter": "~0.3.5"
           }
         },
         "es6-set": {
@@ -21069,11 +20373,11 @@
           "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
           "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
           "requires": {
-            "d": "1.0.0",
-            "es5-ext": "0.10.45",
-            "es6-iterator": "2.0.3",
+            "d": "1",
+            "es5-ext": "~0.10.14",
+            "es6-iterator": "~2.0.1",
             "es6-symbol": "3.1.1",
-            "event-emitter": "0.3.5"
+            "event-emitter": "~0.3.5"
           }
         },
         "es6-symbol": {
@@ -21081,8 +20385,8 @@
           "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
           "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
           "requires": {
-            "d": "1.0.0",
-            "es5-ext": "0.10.45"
+            "d": "1",
+            "es5-ext": "~0.10.14"
           }
         },
         "es6-weak-map": {
@@ -21090,10 +20394,10 @@
           "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
           "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
           "requires": {
-            "d": "1.0.0",
-            "es5-ext": "0.10.45",
-            "es6-iterator": "2.0.3",
-            "es6-symbol": "3.1.1"
+            "d": "1",
+            "es5-ext": "^0.10.14",
+            "es6-iterator": "^2.0.1",
+            "es6-symbol": "^3.1.1"
           }
         },
         "escape-html": {
@@ -21111,10 +20415,10 @@
           "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz",
           "integrity": "sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM=",
           "requires": {
-            "esprima": "1.1.1",
-            "estraverse": "1.5.1",
-            "esutils": "1.0.0",
-            "source-map": "0.1.43"
+            "esprima": "~1.1.1",
+            "estraverse": "~1.5.0",
+            "esutils": "~1.0.0",
+            "source-map": "~0.1.33"
           },
           "dependencies": {
             "esprima": {
@@ -21133,7 +20437,7 @@
               "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
               "optional": true,
               "requires": {
-                "amdefine": "1.0.1"
+                "amdefine": ">=0.0.4"
               }
             }
           }
@@ -21143,10 +20447,10 @@
           "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
           "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
           "requires": {
-            "es6-map": "0.1.5",
-            "es6-weak-map": "2.0.2",
-            "esrecurse": "4.2.1",
-            "estraverse": "4.2.0"
+            "es6-map": "^0.1.3",
+            "es6-weak-map": "^2.0.1",
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
           },
           "dependencies": {
             "estraverse": {
@@ -21161,39 +20465,39 @@
           "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz",
           "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=",
           "requires": {
-            "chalk": "1.1.3",
-            "concat-stream": "1.6.2",
-            "debug": "2.6.9",
-            "doctrine": "1.5.0",
-            "es6-map": "0.1.5",
-            "escope": "3.6.0",
-            "espree": "3.5.4",
-            "estraverse": "4.2.0",
-            "esutils": "2.0.2",
-            "file-entry-cache": "1.3.1",
-            "glob": "7.1.2",
-            "globals": "9.18.0",
-            "ignore": "3.3.10",
-            "imurmurhash": "0.1.4",
-            "inquirer": "0.12.0",
-            "is-my-json-valid": "2.17.2",
-            "is-resolvable": "1.1.0",
-            "js-yaml": "3.7.0",
-            "json-stable-stringify": "1.0.1",
-            "levn": "0.3.0",
-            "lodash": "4.17.10",
-            "mkdirp": "0.5.1",
-            "optionator": "0.8.2",
-            "path-is-absolute": "1.0.1",
-            "path-is-inside": "1.0.2",
-            "pluralize": "1.2.1",
-            "progress": "1.1.8",
-            "require-uncached": "1.0.3",
-            "shelljs": "0.6.1",
-            "strip-json-comments": "1.0.4",
-            "table": "3.8.3",
-            "text-table": "0.2.0",
-            "user-home": "2.0.0"
+            "chalk": "^1.1.3",
+            "concat-stream": "^1.4.6",
+            "debug": "^2.1.1",
+            "doctrine": "^1.2.2",
+            "es6-map": "^0.1.3",
+            "escope": "^3.6.0",
+            "espree": "^3.1.6",
+            "estraverse": "^4.2.0",
+            "esutils": "^2.0.2",
+            "file-entry-cache": "^1.1.1",
+            "glob": "^7.0.3",
+            "globals": "^9.2.0",
+            "ignore": "^3.1.2",
+            "imurmurhash": "^0.1.4",
+            "inquirer": "^0.12.0",
+            "is-my-json-valid": "^2.10.0",
+            "is-resolvable": "^1.0.0",
+            "js-yaml": "^3.5.1",
+            "json-stable-stringify": "^1.0.0",
+            "levn": "^0.3.0",
+            "lodash": "^4.0.0",
+            "mkdirp": "^0.5.0",
+            "optionator": "^0.8.1",
+            "path-is-absolute": "^1.0.0",
+            "path-is-inside": "^1.0.1",
+            "pluralize": "^1.2.1",
+            "progress": "^1.1.8",
+            "require-uncached": "^1.0.2",
+            "shelljs": "^0.6.0",
+            "strip-json-comments": "~1.0.1",
+            "table": "^3.7.8",
+            "text-table": "~0.2.0",
+            "user-home": "^2.0.0"
           },
           "dependencies": {
             "debug": {
@@ -21214,12 +20518,12 @@
               "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
               "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
               "requires": {
-                "fs.realpath": "1.0.0",
-                "inflight": "1.0.6",
-                "inherits": "2.0.3",
-                "minimatch": "3.0.4",
-                "once": "1.4.0",
-                "path-is-absolute": "1.0.1"
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
               }
             }
           }
@@ -21229,8 +20533,8 @@
           "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
           "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
           "requires": {
-            "acorn": "5.7.1",
-            "acorn-jsx": "3.0.1"
+            "acorn": "^5.5.0",
+            "acorn-jsx": "^3.0.0"
           }
         },
         "esprima-fb": {
@@ -21243,7 +20547,7 @@
           "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
           "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
           "requires": {
-            "estraverse": "4.2.0"
+            "estraverse": "^4.1.0"
           },
           "dependencies": {
             "estraverse": {
@@ -21273,8 +20577,8 @@
           "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
           "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
           "requires": {
-            "d": "1.0.0",
-            "es5-ext": "0.10.45"
+            "d": "1",
+            "es5-ext": "~0.10.14"
           }
         },
         "eventemitter3": {
@@ -21292,7 +20596,7 @@
           "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
           "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
           "requires": {
-            "original": "1.0.1"
+            "original": ">=0.0.5"
           }
         },
         "exit-hook": {
@@ -21305,7 +20609,7 @@
           "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
           "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
           "requires": {
-            "is-posix-bracket": "0.1.1"
+            "is-posix-bracket": "^0.1.0"
           }
         },
         "expand-range": {
@@ -21313,7 +20617,7 @@
           "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
           "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
           "requires": {
-            "fill-range": "2.2.4"
+            "fill-range": "^2.1.0"
           }
         },
         "express": {
@@ -21321,36 +20625,36 @@
           "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
           "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
           "requires": {
-            "accepts": "1.3.5",
+            "accepts": "~1.3.5",
             "array-flatten": "1.1.1",
             "body-parser": "1.18.2",
             "content-disposition": "0.5.2",
-            "content-type": "1.0.4",
+            "content-type": "~1.0.4",
             "cookie": "0.3.1",
             "cookie-signature": "1.0.6",
             "debug": "2.6.9",
-            "depd": "1.1.2",
-            "encodeurl": "1.0.2",
-            "escape-html": "1.0.3",
-            "etag": "1.8.1",
+            "depd": "~1.1.2",
+            "encodeurl": "~1.0.2",
+            "escape-html": "~1.0.3",
+            "etag": "~1.8.1",
             "finalhandler": "1.1.1",
             "fresh": "0.5.2",
             "merge-descriptors": "1.0.1",
-            "methods": "1.1.2",
-            "on-finished": "2.3.0",
-            "parseurl": "1.3.2",
+            "methods": "~1.1.2",
+            "on-finished": "~2.3.0",
+            "parseurl": "~1.3.2",
             "path-to-regexp": "0.1.7",
-            "proxy-addr": "2.0.3",
+            "proxy-addr": "~2.0.3",
             "qs": "6.5.1",
-            "range-parser": "1.2.0",
+            "range-parser": "~1.2.0",
             "safe-buffer": "5.1.1",
             "send": "0.16.2",
             "serve-static": "1.13.2",
             "setprototypeof": "1.1.0",
-            "statuses": "1.4.0",
-            "type-is": "1.6.16",
+            "statuses": "~1.4.0",
+            "type-is": "~1.6.16",
             "utils-merge": "1.0.1",
-            "vary": "1.1.2"
+            "vary": "~1.1.2"
           },
           "dependencies": {
             "debug": {
@@ -21383,7 +20687,7 @@
           "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
           "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
           "requires": {
-            "is-extglob": "1.0.0"
+            "is-extglob": "^1.0.0"
           }
         },
         "extract-text-webpack-plugin": {
@@ -21391,8 +20695,8 @@
           "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-0.9.1.tgz",
           "integrity": "sha1-723FCMs17Q3PikAJq76FP3p2IrU=",
           "requires": {
-            "async": "1.5.2",
-            "loader-utils": "0.2.17"
+            "async": "^1.5.0",
+            "loader-utils": "^0.2.3"
           },
           "dependencies": {
             "async": {
@@ -21412,10 +20716,10 @@
           "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
           "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
           "requires": {
-            "acorn": "5.7.1",
-            "foreach": "2.0.5",
+            "acorn": "^5.0.0",
+            "foreach": "^2.0.5",
             "isarray": "0.0.1",
-            "object-keys": "1.0.12"
+            "object-keys": "^1.0.6"
           },
           "dependencies": {
             "isarray": {
@@ -21450,7 +20754,7 @@
           "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
           "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
           "requires": {
-            "websocket-driver": "0.7.0"
+            "websocket-driver": ">=0.5.1"
           }
         },
         "fbjs": {
@@ -21458,13 +20762,13 @@
           "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
           "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
           "requires": {
-            "core-js": "1.2.7",
-            "isomorphic-fetch": "2.2.1",
-            "loose-envify": "1.3.1",
-            "object-assign": "4.1.1",
-            "promise": "7.3.1",
-            "setimmediate": "1.0.5",
-            "ua-parser-js": "0.7.18"
+            "core-js": "^1.0.0",
+            "isomorphic-fetch": "^2.1.1",
+            "loose-envify": "^1.0.0",
+            "object-assign": "^4.1.0",
+            "promise": "^7.1.1",
+            "setimmediate": "^1.0.5",
+            "ua-parser-js": "^0.7.18"
           },
           "dependencies": {
             "object-assign": {
@@ -21479,7 +20783,7 @@
           "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
           "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
           "requires": {
-            "pend": "1.2.0"
+            "pend": "~1.2.0"
           }
         },
         "figures": {
@@ -21487,8 +20791,8 @@
           "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
           "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
           "requires": {
-            "escape-string-regexp": "1.0.5",
-            "object-assign": "4.1.1"
+            "escape-string-regexp": "^1.0.5",
+            "object-assign": "^4.1.0"
           },
           "dependencies": {
             "object-assign": {
@@ -21503,8 +20807,8 @@
           "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz",
           "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=",
           "requires": {
-            "flat-cache": "1.3.0",
-            "object-assign": "4.1.1"
+            "flat-cache": "^1.2.1",
+            "object-assign": "^4.0.1"
           },
           "dependencies": {
             "object-assign": {
@@ -21519,29 +20823,82 @@
           "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.8.5.tgz",
           "integrity": "sha1-knXQMf54DyfUf19K8CvUNxPMFRs=",
           "requires": {
-            "loader-utils": "0.2.17"
+            "loader-utils": "~0.2.5"
           }
         },
+        "file-type": {
+          "version": "8.1.0",
+          "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+          "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ=="
+        },
         "filename-regex": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
           "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
         },
-        "filepicker-js": {
-          "version": "2.4.18",
-          "resolved": "https://registry.npmjs.org/filepicker-js/-/filepicker-js-2.4.18.tgz",
-          "integrity": "sha1-gquFC5lEsSJY82F/5RbUfUileVw="
+        "filestack-js": {
+          "version": "1.14.6",
+          "resolved": "https://registry.npmjs.org/filestack-js/-/filestack-js-1.14.6.tgz",
+          "integrity": "sha512-mcME182eOUy3OyU0F9rcATQf3/YY3N1suXYVv3hcS1RxeVHIIkM9XI6N9Qg5t04y0qOGud9xv/GO+oKhreCSIw==",
+          "requires": {
+            "abab": "^2.0.0",
+            "ajv": "^6.5.5",
+            "file-type": "^8.1.0",
+            "filestack-loader": "^3.0.4",
+            "is-svg": "^3.0.0",
+            "isutf8": "^2.0.2",
+            "spark-md5": "^3.0.0",
+            "superagent": "^3.8.3",
+            "tcomb-validation": "^3.4.1",
+            "tslib": "^1.9.3"
+          },
+          "dependencies": {
+            "ajv": {
+              "version": "6.10.2",
+              "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+              "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+              "requires": {
+                "fast-deep-equal": "^2.0.1",
+                "fast-json-stable-stringify": "^2.0.0",
+                "json-schema-traverse": "^0.4.1",
+                "uri-js": "^4.2.2"
+              }
+            },
+            "fast-deep-equal": {
+              "version": "2.0.1",
+              "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+              "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+            },
+            "is-svg": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+              "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+              "requires": {
+                "html-comment-regex": "^1.1.0"
+              }
+            },
+            "json-schema-traverse": {
+              "version": "0.4.1",
+              "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+              "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+            }
+          }
+        },
+        "filestack-loader": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/filestack-loader/-/filestack-loader-3.0.4.tgz",
+          "integrity": "sha512-b6uOCWHd1gM0+5KBA1rA4qfEgTqyTr5umLM4bBWT4z98WUwxa6KzCiq+z0VnR4rN+NCx6kyZ/wLXjGcPU32TxQ=="
         },
         "fill-range": {
           "version": "2.2.4",
           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
           "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
           "requires": {
-            "is-number": "2.1.0",
-            "isobject": "2.1.0",
-            "randomatic": "3.0.0",
-            "repeat-element": "1.1.2",
-            "repeat-string": "1.6.1"
+            "is-number": "^2.1.0",
+            "isobject": "^2.0.0",
+            "randomatic": "^3.0.0",
+            "repeat-element": "^1.1.2",
+            "repeat-string": "^1.5.2"
           }
         },
         "finalhandler": {
@@ -21550,12 +20907,12 @@
           "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
           "requires": {
             "debug": "2.6.9",
-            "encodeurl": "1.0.2",
-            "escape-html": "1.0.3",
-            "on-finished": "2.3.0",
-            "parseurl": "1.3.2",
-            "statuses": "1.4.0",
-            "unpipe": "1.0.0"
+            "encodeurl": "~1.0.2",
+            "escape-html": "~1.0.3",
+            "on-finished": "~2.3.0",
+            "parseurl": "~1.3.2",
+            "statuses": "~1.4.0",
+            "unpipe": "~1.0.0"
           },
           "dependencies": {
             "debug": {
@@ -21573,9 +20930,9 @@
           "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
           "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
           "requires": {
-            "commondir": "1.0.1",
-            "mkdirp": "0.5.1",
-            "pkg-dir": "1.0.0"
+            "commondir": "^1.0.1",
+            "mkdirp": "^0.5.1",
+            "pkg-dir": "^1.0.0"
           }
         },
         "find-up": {
@@ -21583,8 +20940,8 @@
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "findit2": {
@@ -21597,10 +20954,10 @@
           "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
           "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
           "requires": {
-            "circular-json": "0.3.3",
-            "del": "2.2.2",
-            "graceful-fs": "4.1.11",
-            "write": "0.2.1"
+            "circular-json": "^0.3.1",
+            "del": "^2.0.2",
+            "graceful-fs": "^4.1.2",
+            "write": "^0.2.1"
           }
         },
         "flatten": {
@@ -21613,7 +20970,7 @@
           "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz",
           "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==",
           "requires": {
-            "debug": "3.1.0"
+            "debug": "^3.1.0"
           }
         },
         "for-in": {
@@ -21626,7 +20983,7 @@
           "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
           "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
           "requires": {
-            "for-in": "1.0.2"
+            "for-in": "^1.0.1"
           }
         },
         "foreach": {
@@ -21644,17 +21001,22 @@
           "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
           "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
           "requires": {
-            "asynckit": "0.4.0",
+            "asynckit": "^0.4.0",
             "combined-stream": "1.0.6",
-            "mime-types": "2.1.18"
+            "mime-types": "^2.1.12"
           }
         },
+        "form-data-to-object": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/form-data-to-object/-/form-data-to-object-0.2.0.tgz",
+          "integrity": "sha1-96jmjd2RChEApl4lrGpIQUP/gWg="
+        },
         "formatio": {
           "version": "1.1.1",
           "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz",
           "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=",
           "requires": {
-            "samsam": "1.1.2"
+            "samsam": "~1.1"
           }
         },
         "formidable": {
@@ -21662,6 +21024,14 @@
           "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz",
           "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg=="
         },
+        "formsy-react": {
+          "version": "0.19.5",
+          "resolved": "https://registry.npmjs.org/formsy-react/-/formsy-react-0.19.5.tgz",
+          "integrity": "sha1-dgpXrAETRC499MMJw2ON2SlX544=",
+          "requires": {
+            "form-data-to-object": "^0.2.0"
+          }
+        },
         "forwarded": {
           "version": "0.1.2",
           "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -21677,15 +21047,502 @@
           "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
           "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
         },
+        "fsevents": {
+          "version": "1.2.9",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+          "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+          "optional": true,
+          "requires": {
+            "nan": "^2.12.1",
+            "node-pre-gyp": "^0.12.0"
+          },
+          "dependencies": {
+            "abbrev": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "ansi-regex": {
+              "version": "2.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "aproba": {
+              "version": "1.2.0",
+              "bundled": true,
+              "optional": true
+            },
+            "are-we-there-yet": {
+              "version": "1.1.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "delegates": "^1.0.0",
+                "readable-stream": "^2.0.6"
+              }
+            },
+            "balanced-match": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "brace-expansion": {
+              "version": "1.1.11",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+              }
+            },
+            "chownr": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "code-point-at": {
+              "version": "1.1.0",
+              "bundled": true,
+              "optional": true
+            },
+            "concat-map": {
+              "version": "0.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "console-control-strings": {
+              "version": "1.1.0",
+              "bundled": true,
+              "optional": true
+            },
+            "core-util-is": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "debug": {
+              "version": "4.1.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ms": "^2.1.1"
+              }
+            },
+            "deep-extend": {
+              "version": "0.6.0",
+              "bundled": true,
+              "optional": true
+            },
+            "delegates": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "detect-libc": {
+              "version": "1.0.3",
+              "bundled": true,
+              "optional": true
+            },
+            "fs-minipass": {
+              "version": "1.2.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minipass": "^2.2.1"
+              }
+            },
+            "fs.realpath": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "gauge": {
+              "version": "2.7.4",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "aproba": "^1.0.3",
+                "console-control-strings": "^1.0.0",
+                "has-unicode": "^2.0.0",
+                "object-assign": "^4.1.0",
+                "signal-exit": "^3.0.0",
+                "string-width": "^1.0.1",
+                "strip-ansi": "^3.0.1",
+                "wide-align": "^1.1.0"
+              }
+            },
+            "glob": {
+              "version": "7.1.3",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
+              }
+            },
+            "has-unicode": {
+              "version": "2.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "iconv-lite": {
+              "version": "0.4.24",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "safer-buffer": ">= 2.1.2 < 3"
+              }
+            },
+            "ignore-walk": {
+              "version": "3.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minimatch": "^3.0.4"
+              }
+            },
+            "inflight": {
+              "version": "1.0.6",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "once": "^1.3.0",
+                "wrappy": "1"
+              }
+            },
+            "inherits": {
+              "version": "2.0.3",
+              "bundled": true,
+              "optional": true
+            },
+            "ini": {
+              "version": "1.3.5",
+              "bundled": true,
+              "optional": true
+            },
+            "is-fullwidth-code-point": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "number-is-nan": "^1.0.0"
+              }
+            },
+            "isarray": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "minimatch": {
+              "version": "3.0.4",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "brace-expansion": "^1.1.7"
+              }
+            },
+            "minimist": {
+              "version": "0.0.8",
+              "bundled": true,
+              "optional": true
+            },
+            "minipass": {
+              "version": "2.3.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "^5.1.2",
+                "yallist": "^3.0.0"
+              }
+            },
+            "minizlib": {
+              "version": "1.2.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minipass": "^2.2.1"
+              }
+            },
+            "mkdirp": {
+              "version": "0.5.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minimist": "0.0.8"
+              }
+            },
+            "ms": {
+              "version": "2.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "nan": {
+              "version": "2.14.0",
+              "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+              "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+              "optional": true
+            },
+            "needle": {
+              "version": "2.3.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "debug": "^4.1.0",
+                "iconv-lite": "^0.4.4",
+                "sax": "^1.2.4"
+              }
+            },
+            "node-pre-gyp": {
+              "version": "0.12.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "detect-libc": "^1.0.2",
+                "mkdirp": "^0.5.1",
+                "needle": "^2.2.1",
+                "nopt": "^4.0.1",
+                "npm-packlist": "^1.1.6",
+                "npmlog": "^4.0.2",
+                "rc": "^1.2.7",
+                "rimraf": "^2.6.1",
+                "semver": "^5.3.0",
+                "tar": "^4"
+              }
+            },
+            "nopt": {
+              "version": "4.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "abbrev": "1",
+                "osenv": "^0.1.4"
+              }
+            },
+            "npm-bundled": {
+              "version": "1.0.6",
+              "bundled": true,
+              "optional": true
+            },
+            "npm-packlist": {
+              "version": "1.4.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ignore-walk": "^3.0.1",
+                "npm-bundled": "^1.0.1"
+              }
+            },
+            "npmlog": {
+              "version": "4.1.2",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "are-we-there-yet": "~1.1.2",
+                "console-control-strings": "~1.1.0",
+                "gauge": "~2.7.3",
+                "set-blocking": "~2.0.0"
+              }
+            },
+            "number-is-nan": {
+              "version": "1.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "object-assign": {
+              "version": "4.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "once": {
+              "version": "1.4.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "wrappy": "1"
+              }
+            },
+            "os-homedir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "os-tmpdir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "osenv": {
+              "version": "0.1.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "os-homedir": "^1.0.0",
+                "os-tmpdir": "^1.0.0"
+              }
+            },
+            "path-is-absolute": {
+              "version": "1.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "process-nextick-args": {
+              "version": "2.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "rc": {
+              "version": "1.2.8",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "deep-extend": "^0.6.0",
+                "ini": "~1.3.0",
+                "minimist": "^1.2.0",
+                "strip-json-comments": "~2.0.1"
+              },
+              "dependencies": {
+                "minimist": {
+                  "version": "1.2.0",
+                  "bundled": true,
+                  "optional": true
+                }
+              }
+            },
+            "readable-stream": {
+              "version": "2.3.6",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.3",
+                "isarray": "~1.0.0",
+                "process-nextick-args": "~2.0.0",
+                "safe-buffer": "~5.1.1",
+                "string_decoder": "~1.1.1",
+                "util-deprecate": "~1.0.1"
+              }
+            },
+            "rimraf": {
+              "version": "2.6.3",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "glob": "^7.1.3"
+              }
+            },
+            "safe-buffer": {
+              "version": "5.1.2",
+              "bundled": true,
+              "optional": true
+            },
+            "safer-buffer": {
+              "version": "2.1.2",
+              "bundled": true,
+              "optional": true
+            },
+            "sax": {
+              "version": "1.2.4",
+              "bundled": true,
+              "optional": true
+            },
+            "semver": {
+              "version": "5.7.0",
+              "bundled": true,
+              "optional": true
+            },
+            "set-blocking": {
+              "version": "2.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "signal-exit": {
+              "version": "3.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "string-width": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "code-point-at": "^1.0.0",
+                "is-fullwidth-code-point": "^1.0.0",
+                "strip-ansi": "^3.0.0"
+              }
+            },
+            "string_decoder": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "~5.1.0"
+              }
+            },
+            "strip-ansi": {
+              "version": "3.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ansi-regex": "^2.0.0"
+              }
+            },
+            "strip-json-comments": {
+              "version": "2.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "tar": {
+              "version": "4.4.8",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "chownr": "^1.1.1",
+                "fs-minipass": "^1.2.5",
+                "minipass": "^2.3.4",
+                "minizlib": "^1.1.1",
+                "mkdirp": "^0.5.0",
+                "safe-buffer": "^5.1.2",
+                "yallist": "^3.0.2"
+              }
+            },
+            "util-deprecate": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "wide-align": {
+              "version": "1.1.3",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "string-width": "^1.0.2 || 2"
+              }
+            },
+            "wrappy": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "yallist": {
+              "version": "3.0.3",
+              "bundled": true,
+              "optional": true
+            }
+          }
+        },
         "fstream": {
           "version": "1.0.11",
           "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
           "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
           "requires": {
-            "graceful-fs": "4.1.11",
-            "inherits": "2.0.3",
-            "mkdirp": "0.5.1",
-            "rimraf": "2.6.2"
+            "graceful-fs": "^4.1.2",
+            "inherits": "~2.0.0",
+            "mkdirp": ">=0.5 0",
+            "rimraf": "2"
           }
         },
         "function-bind": {
@@ -21698,14 +21555,14 @@
           "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
           "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
           "requires": {
-            "aproba": "1.2.0",
-            "console-control-strings": "1.1.0",
-            "has-unicode": "2.0.1",
-            "object-assign": "4.1.1",
-            "signal-exit": "3.0.2",
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wide-align": "1.1.3"
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
           },
           "dependencies": {
             "object-assign": {
@@ -21720,7 +21577,7 @@
           "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
           "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
           "requires": {
-            "globule": "1.2.1"
+            "globule": "^1.0.0"
           }
         },
         "generate-function": {
@@ -21733,7 +21590,7 @@
           "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
           "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
           "requires": {
-            "is-property": "1.0.2"
+            "is-property": "^1.0.0"
           }
         },
         "get-caller-file": {
@@ -21751,7 +21608,7 @@
           "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
           "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
           "requires": {
-            "assert-plus": "1.0.0"
+            "assert-plus": "^1.0.0"
           },
           "dependencies": {
             "assert-plus": {
@@ -21766,11 +21623,11 @@
           "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
           "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
           "requires": {
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "2 || 3",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "glob-base": {
@@ -21778,8 +21635,8 @@
           "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
           "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
           "requires": {
-            "glob-parent": "2.0.0",
-            "is-glob": "2.0.1"
+            "glob-parent": "^2.0.0",
+            "is-glob": "^2.0.0"
           }
         },
         "glob-parent": {
@@ -21787,7 +21644,7 @@
           "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
           "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
           "requires": {
-            "is-glob": "2.0.1"
+            "is-glob": "^2.0.0"
           }
         },
         "globals": {
@@ -21800,12 +21657,12 @@
           "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
           "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
           "requires": {
-            "array-union": "1.0.2",
-            "arrify": "1.0.1",
-            "glob": "7.1.2",
-            "object-assign": "4.1.1",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "array-union": "^1.0.1",
+            "arrify": "^1.0.0",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           },
           "dependencies": {
             "glob": {
@@ -21813,12 +21670,12 @@
               "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
               "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
               "requires": {
-                "fs.realpath": "1.0.0",
-                "inflight": "1.0.6",
-                "inherits": "2.0.3",
-                "minimatch": "3.0.4",
-                "once": "1.4.0",
-                "path-is-absolute": "1.0.1"
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
               }
             },
             "object-assign": {
@@ -21833,9 +21690,9 @@
           "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
           "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
           "requires": {
-            "glob": "7.1.2",
-            "lodash": "4.17.10",
-            "minimatch": "3.0.4"
+            "glob": "~7.1.1",
+            "lodash": "~4.17.10",
+            "minimatch": "~3.0.2"
           },
           "dependencies": {
             "glob": {
@@ -21843,12 +21700,12 @@
               "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
               "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
               "requires": {
-                "fs.realpath": "1.0.0",
-                "inflight": "1.0.6",
-                "inherits": "2.0.3",
-                "minimatch": "3.0.4",
-                "once": "1.4.0",
-                "path-is-absolute": "1.0.1"
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
               }
             }
           }
@@ -21878,8 +21735,8 @@
           "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
           "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
           "requires": {
-            "ajv": "4.11.8",
-            "har-schema": "1.0.5"
+            "ajv": "^4.9.1",
+            "har-schema": "^1.0.5"
           }
         },
         "has": {
@@ -21887,7 +21744,7 @@
           "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
           "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
           "requires": {
-            "function-bind": "1.1.1"
+            "function-bind": "^1.1.1"
           }
         },
         "has-ansi": {
@@ -21895,7 +21752,7 @@
           "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
           "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "has-color": {
@@ -21918,10 +21775,10 @@
           "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
           "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
           "requires": {
-            "boom": "2.10.1",
-            "cryptiles": "2.0.5",
-            "hoek": "2.16.3",
-            "sntp": "1.0.9"
+            "boom": "2.x.x",
+            "cryptiles": "2.x.x",
+            "hoek": "2.x.x",
+            "sntp": "1.x.x"
           }
         },
         "he": {
@@ -21929,6 +21786,27 @@
           "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
           "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
         },
+        "history": {
+          "version": "1.17.0",
+          "resolved": "https://registry.npmjs.org/history/-/history-1.17.0.tgz",
+          "integrity": "sha1-xUg8qlodH+oAoafY0ZuHQBZxHSk=",
+          "requires": {
+            "deep-equal": "^1.0.0",
+            "invariant": "^2.0.0",
+            "query-string": "^3.0.0",
+            "warning": "^2.0.0"
+          },
+          "dependencies": {
+            "query-string": {
+              "version": "3.0.3",
+              "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz",
+              "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=",
+              "requires": {
+                "strict-uri-encode": "^1.0.0"
+              }
+            }
+          }
+        },
         "hoek": {
           "version": "2.16.3",
           "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
@@ -21944,8 +21822,8 @@
           "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
           "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
           "requires": {
-            "os-homedir": "1.0.2",
-            "os-tmpdir": "1.0.2"
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.1"
           }
         },
         "hosted-git-info": {
@@ -21963,13 +21841,13 @@
           "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.17.tgz",
           "integrity": "sha512-O+StuKL0UWfwX5Zv4rFxd60DPcT5DVjGq1AlnP6VQ8wzudft/W4hx5Wl98aSYNwFBHY6XWJreRw/BehX4l+diQ==",
           "requires": {
-            "camel-case": "3.0.0",
-            "clean-css": "4.1.11",
-            "commander": "2.15.1",
-            "he": "1.1.1",
-            "param-case": "2.1.1",
-            "relateurl": "0.2.7",
-            "uglify-js": "3.4.2"
+            "camel-case": "3.0.x",
+            "clean-css": "4.1.x",
+            "commander": "2.15.x",
+            "he": "1.1.x",
+            "param-case": "2.1.x",
+            "relateurl": "0.2.x",
+            "uglify-js": "3.4.x"
           },
           "dependencies": {
             "commander": {
@@ -21984,12 +21862,12 @@
           "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz",
           "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
           "requires": {
-            "bluebird": "3.5.1",
-            "html-minifier": "3.5.17",
-            "loader-utils": "0.2.17",
-            "lodash": "4.17.10",
-            "pretty-error": "2.1.1",
-            "toposort": "1.0.7"
+            "bluebird": "^3.4.7",
+            "html-minifier": "^3.2.3",
+            "loader-utils": "^0.2.16",
+            "lodash": "^4.17.3",
+            "pretty-error": "^2.0.2",
+            "toposort": "^1.0.0"
           }
         },
         "htmlparser2": {
@@ -21997,10 +21875,10 @@
           "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
           "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
           "requires": {
-            "domelementtype": "1.3.0",
-            "domhandler": "2.1.0",
-            "domutils": "1.1.6",
-            "readable-stream": "1.0.34"
+            "domelementtype": "1",
+            "domhandler": "2.1",
+            "domutils": "1.1",
+            "readable-stream": "1.0"
           },
           "dependencies": {
             "domutils": {
@@ -22008,7 +21886,7 @@
               "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz",
               "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
               "requires": {
-                "domelementtype": "1.3.0"
+                "domelementtype": "1"
               }
             },
             "isarray": {
@@ -22021,10 +21899,10 @@
               "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
               "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
               "requires": {
-                "core-util-is": "1.0.2",
-                "inherits": "2.0.3",
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.1",
                 "isarray": "0.0.1",
-                "string_decoder": "0.10.31"
+                "string_decoder": "~0.10.x"
               }
             },
             "string_decoder": {
@@ -22039,10 +21917,10 @@
           "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
           "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
           "requires": {
-            "depd": "1.1.2",
+            "depd": "~1.1.2",
             "inherits": "2.0.3",
             "setprototypeof": "1.1.0",
-            "statuses": "1.4.0"
+            "statuses": ">= 1.4.0 < 2"
           }
         },
         "http-parser-js": {
@@ -22055,9 +21933,9 @@
           "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
           "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
           "requires": {
-            "eventemitter3": "3.1.0",
-            "follow-redirects": "1.5.0",
-            "requires-port": "1.0.0"
+            "eventemitter3": "^3.0.0",
+            "follow-redirects": "^1.0.0",
+            "requires-port": "^1.0.0"
           }
         },
         "http-proxy-middleware": {
@@ -22065,10 +21943,10 @@
           "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
           "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
           "requires": {
-            "http-proxy": "1.17.0",
-            "is-glob": "3.1.0",
-            "lodash": "4.17.10",
-            "micromatch": "2.3.11"
+            "http-proxy": "^1.16.2",
+            "is-glob": "^3.1.0",
+            "lodash": "^4.17.2",
+            "micromatch": "^2.3.11"
           },
           "dependencies": {
             "is-extglob": {
@@ -22081,7 +21959,7 @@
               "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
               "requires": {
-                "is-extglob": "2.1.1"
+                "is-extglob": "^2.1.0"
               }
             }
           }
@@ -22091,9 +21969,9 @@
           "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
           "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
           "requires": {
-            "assert-plus": "0.2.0",
-            "jsprim": "1.4.1",
-            "sshpk": "1.14.2"
+            "assert-plus": "^0.2.0",
+            "jsprim": "^1.2.2",
+            "sshpk": "^1.7.0"
           }
         },
         "https-browserify": {
@@ -22101,12 +21979,22 @@
           "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
           "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI="
         },
+        "humps": {
+          "version": "0.6.0",
+          "resolved": "https://registry.npmjs.org/humps/-/humps-0.6.0.tgz",
+          "integrity": "sha1-phchA4bwRF0SLOtNlBSho5saHpQ="
+        },
+        "hyphenate-style-name": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz",
+          "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ=="
+        },
         "iconv-lite": {
           "version": "0.4.23",
           "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
           "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
           "requires": {
-            "safer-buffer": "2.1.2"
+            "safer-buffer": ">= 2.1.2 < 3"
           }
         },
         "icss-replace-symbols": {
@@ -22119,11 +22007,11 @@
           "resolved": "https://registry.npmjs.org/idtoken-verifier/-/idtoken-verifier-1.2.0.tgz",
           "integrity": "sha512-8jmmFHwdPz8L73zGNAXHHOV9yXNC+Z0TUBN5rafpoaFaLFltlIFr1JkQa3FYAETP23eSsulVw0sBiwrE8jqbUg==",
           "requires": {
-            "base64-js": "1.3.0",
-            "crypto-js": "3.1.9-1",
-            "jsbn": "0.1.1",
-            "superagent": "3.8.3",
-            "url-join": "1.1.0"
+            "base64-js": "^1.2.0",
+            "crypto-js": "^3.1.9-1",
+            "jsbn": "^0.1.0",
+            "superagent": "^3.8.2",
+            "url-join": "^1.1.0"
           }
         },
         "ieee754": {
@@ -22151,7 +22039,7 @@
           "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
           "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
           "requires": {
-            "repeating": "2.0.1"
+            "repeating": "^2.0.0"
           }
         },
         "indexes-of": {
@@ -22169,8 +22057,8 @@
           "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
           "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
           "requires": {
-            "once": "1.4.0",
-            "wrappy": "1.0.2"
+            "once": "^1.3.0",
+            "wrappy": "1"
           }
         },
         "inherits": {
@@ -22178,24 +22066,33 @@
           "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
           "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
         },
+        "inline-style-prefixer": {
+          "version": "3.0.8",
+          "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz",
+          "integrity": "sha1-hVG45bTVcyROZqNLBPfTIHaitTQ=",
+          "requires": {
+            "bowser": "^1.7.3",
+            "css-in-js-utils": "^2.0.0"
+          }
+        },
         "inquirer": {
           "version": "0.12.0",
           "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
           "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
           "requires": {
-            "ansi-escapes": "1.4.0",
-            "ansi-regex": "2.1.1",
-            "chalk": "1.1.3",
-            "cli-cursor": "1.0.2",
-            "cli-width": "2.2.0",
-            "figures": "1.7.0",
-            "lodash": "4.17.10",
-            "readline2": "1.0.1",
-            "run-async": "0.1.0",
-            "rx-lite": "3.1.2",
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "through": "2.3.8"
+            "ansi-escapes": "^1.1.0",
+            "ansi-regex": "^2.0.0",
+            "chalk": "^1.0.0",
+            "cli-cursor": "^1.0.1",
+            "cli-width": "^2.0.0",
+            "figures": "^1.3.5",
+            "lodash": "^4.3.0",
+            "readline2": "^1.0.1",
+            "run-async": "^0.1.0",
+            "rx-lite": "^3.1.2",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.0",
+            "through": "^2.3.6"
           }
         },
         "interpret": {
@@ -22208,7 +22105,7 @@
           "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
           "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
           "requires": {
-            "loose-envify": "1.3.1"
+            "loose-envify": "^1.0.0"
           }
         },
         "invert-kv": {
@@ -22236,7 +22133,7 @@
           "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
           "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
           "requires": {
-            "binary-extensions": "1.11.0"
+            "binary-extensions": "^1.0.0"
           }
         },
         "is-buffer": {
@@ -22249,7 +22146,7 @@
           "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
           "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
           "requires": {
-            "builtin-modules": "1.1.1"
+            "builtin-modules": "^1.0.0"
           }
         },
         "is-dotfile": {
@@ -22262,7 +22159,7 @@
           "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
           "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
           "requires": {
-            "is-primitive": "2.0.0"
+            "is-primitive": "^2.0.0"
           }
         },
         "is-extendable": {
@@ -22280,7 +22177,7 @@
           "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
           "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "is-fullwidth-code-point": {
@@ -22288,7 +22185,7 @@
           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "is-glob": {
@@ -22296,7 +22193,15 @@
           "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
           "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
           "requires": {
-            "is-extglob": "1.0.0"
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "is-lower-case": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz",
+          "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=",
+          "requires": {
+            "lower-case": "^1.1.0"
           }
         },
         "is-my-ip-valid": {
@@ -22309,11 +22214,11 @@
           "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz",
           "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==",
           "requires": {
-            "generate-function": "2.0.0",
-            "generate-object-property": "1.2.0",
-            "is-my-ip-valid": "1.0.0",
-            "jsonpointer": "4.0.1",
-            "xtend": "4.0.1"
+            "generate-function": "^2.0.0",
+            "generate-object-property": "^1.1.0",
+            "is-my-ip-valid": "^1.0.0",
+            "jsonpointer": "^4.0.0",
+            "xtend": "^4.0.0"
           },
           "dependencies": {
             "xtend": {
@@ -22328,7 +22233,7 @@
           "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
           "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           }
         },
         "is-path-cwd": {
@@ -22341,7 +22246,7 @@
           "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
           "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
           "requires": {
-            "is-path-inside": "1.0.1"
+            "is-path-inside": "^1.0.0"
           }
         },
         "is-path-inside": {
@@ -22349,7 +22254,7 @@
           "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
           "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
           "requires": {
-            "path-is-inside": "1.0.2"
+            "path-is-inside": "^1.0.1"
           }
         },
         "is-plain-obj": {
@@ -22382,6 +22287,11 @@
           "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
           "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="
         },
+        "is-retina": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/is-retina/-/is-retina-1.0.3.tgz",
+          "integrity": "sha1-10AbKGvqKuN/Ykd1iN5QTQuGR+M="
+        },
         "is-stream": {
           "version": "1.1.0",
           "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -22392,7 +22302,7 @@
           "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
           "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
           "requires": {
-            "html-comment-regex": "1.1.1"
+            "html-comment-regex": "^1.1.0"
           }
         },
         "is-typedarray": {
@@ -22400,6 +22310,14 @@
           "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
           "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
         },
+        "is-upper-case": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz",
+          "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=",
+          "requires": {
+            "upper-case": "^1.1.0"
+          }
+        },
         "is-utf8": {
           "version": "0.2.1",
           "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
@@ -22428,8 +22346,8 @@
           "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
           "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
           "requires": {
-            "node-fetch": "1.7.3",
-            "whatwg-fetch": "2.0.4"
+            "node-fetch": "^1.0.1",
+            "whatwg-fetch": ">=0.10.0"
           },
           "dependencies": {
             "whatwg-fetch": {
@@ -22444,21 +22362,26 @@
           "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
           "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
         },
+        "isutf8": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/isutf8/-/isutf8-2.0.4.tgz",
+          "integrity": "sha512-4DvnF8CTx4QYN5UD7VtScvQEJq910d09V2yArkAvc62BUxnuFTnVhkq3iPR802ruiibPG4lQm/I8FNAxPYx5fw=="
+        },
         "jade": {
           "version": "1.11.0",
           "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz",
           "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=",
           "requires": {
             "character-parser": "1.2.1",
-            "clean-css": "3.4.28",
-            "commander": "2.6.0",
-            "constantinople": "3.0.2",
+            "clean-css": "^3.1.9",
+            "commander": "~2.6.0",
+            "constantinople": "~3.0.1",
             "jstransformer": "0.0.2",
-            "mkdirp": "0.5.1",
+            "mkdirp": "~0.5.0",
             "transformers": "2.1.0",
-            "uglify-js": "2.8.29",
-            "void-elements": "2.0.1",
-            "with": "4.0.3"
+            "uglify-js": "^2.4.19",
+            "void-elements": "~2.0.1",
+            "with": "~4.0.0"
           },
           "dependencies": {
             "clean-css": {
@@ -22466,8 +22389,8 @@
               "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
               "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
               "requires": {
-                "commander": "2.8.1",
-                "source-map": "0.4.4"
+                "commander": "2.8.x",
+                "source-map": "0.4.x"
               },
               "dependencies": {
                 "commander": {
@@ -22475,7 +22398,7 @@
                   "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
                   "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
                   "requires": {
-                    "graceful-readlink": "1.0.1"
+                    "graceful-readlink": ">= 1.0.0"
                   }
                 }
               }
@@ -22490,9 +22413,9 @@
               "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
               "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
               "requires": {
-                "source-map": "0.5.7",
-                "uglify-to-browserify": "1.0.2",
-                "yargs": "3.10.0"
+                "source-map": "~0.5.1",
+                "uglify-to-browserify": "~1.0.0",
+                "yargs": "~3.10.0"
               },
               "dependencies": {
                 "source-map": {
@@ -22509,7 +22432,7 @@
           "resolved": "https://registry.npmjs.org/jade-html-loader/-/jade-html-loader-0.0.3.tgz",
           "integrity": "sha1-ggSLSG55YiZ5OPWM0er9nMAAPsw=",
           "requires": {
-            "loader-utils": "0.2.17"
+            "loader-utils": "0.2.x"
           }
         },
         "jade-loader": {
@@ -22517,7 +22440,7 @@
           "resolved": "https://registry.npmjs.org/jade-loader/-/jade-loader-0.8.0.tgz",
           "integrity": "sha1-0bCZcam/kKKymLCvWxrQMA0QnC4=",
           "requires": {
-            "loader-utils": "0.2.17"
+            "loader-utils": "~0.2.5"
           }
         },
         "jade-react-loader": {
@@ -22525,8 +22448,8 @@
           "resolved": "https://registry.npmjs.org/jade-react-loader/-/jade-react-loader-1.0.2.tgz",
           "integrity": "sha1-MxgiARamZZzJxsMO7qqHLSMKioQ=",
           "requires": {
-            "loader-utils": "0.2.17",
-            "react-jade": "2.5.0"
+            "loader-utils": "^0.2.9",
+            "react-jade": "^2.4.0"
           }
         },
         "js-base64": {
@@ -22554,8 +22477,8 @@
           "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
           "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
           "requires": {
-            "argparse": "1.0.10",
-            "esprima": "2.7.3"
+            "argparse": "^1.0.7",
+            "esprima": "^2.6.0"
           },
           "dependencies": {
             "esprima": {
@@ -22575,7 +22498,7 @@
           "resolved": "https://registry.npmjs.org/jsdelivr-cdn-data/-/jsdelivr-cdn-data-0.1.1.tgz",
           "integrity": "sha1-pFDi3G7O57t7b2pylOUYCsvJwQo=",
           "requires": {
-            "semver": "2.2.1"
+            "semver": "~2.2.1"
           },
           "dependencies": {
             "semver": {
@@ -22610,7 +22533,7 @@
           "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
           "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
           "requires": {
-            "jsonify": "0.0.0"
+            "jsonify": "~0.0.0"
           }
         },
         "json-stringify-safe": {
@@ -22661,11 +22584,11 @@
           "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz",
           "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=",
           "requires": {
-            "base62": "1.2.8",
-            "commoner": "0.10.8",
-            "esprima-fb": "15001.1.0-dev-harmony-fb",
-            "object-assign": "2.1.1",
-            "source-map": "0.4.4"
+            "base62": "^1.1.0",
+            "commoner": "^0.10.1",
+            "esprima-fb": "^15001.1.0-dev-harmony-fb",
+            "object-assign": "^2.0.0",
+            "source-map": "^0.4.2"
           }
         },
         "jstransformer": {
@@ -22673,8 +22596,8 @@
           "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz",
           "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=",
           "requires": {
-            "is-promise": "2.1.0",
-            "promise": "6.1.0"
+            "is-promise": "^2.0.0",
+            "promise": "^6.0.1"
           },
           "dependencies": {
             "asap": {
@@ -22687,17 +22610,30 @@
               "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
               "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=",
               "requires": {
-                "asap": "1.0.0"
+                "asap": "~1.0.0"
               }
             }
           }
         },
+        "jwt-decode": {
+          "version": "1.5.1",
+          "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-1.5.1.tgz",
+          "integrity": "sha1-vajYcxubc57otKMaDQJcqUrpLTs=",
+          "requires": {
+            "Base64": "~0.1.3"
+          }
+        },
+        "keycode": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz",
+          "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ="
+        },
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
           "requires": {
-            "is-buffer": "1.1.6"
+            "is-buffer": "^1.1.5"
           }
         },
         "lazy-cache": {
@@ -22710,7 +22646,7 @@
           "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
           "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
           "requires": {
-            "invert-kv": "1.0.0"
+            "invert-kv": "^1.0.0"
           }
         },
         "levn": {
@@ -22718,8 +22654,38 @@
           "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
           "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
           "requires": {
-            "prelude-ls": "1.1.2",
-            "type-check": "0.3.2"
+            "prelude-ls": "~1.1.2",
+            "type-check": "~0.3.2"
+          }
+        },
+        "libphonenumber-js": {
+          "version": "1.7.21",
+          "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.7.21.tgz",
+          "integrity": "sha512-kE5l5NyUdJLwA9EgqtRAMb7jEVTm9u/cfAA2TUdqKlOKnwNFKcTUrD9J850FzYQ2uMJoyoxlj+br092KfGiCvQ==",
+          "requires": {
+            "minimist": "^1.2.0",
+            "xml2js": "^0.4.17"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+              "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+            },
+            "xml2js": {
+              "version": "0.4.19",
+              "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+              "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+              "requires": {
+                "sax": ">=0.6.0",
+                "xmlbuilder": "~9.0.1"
+              }
+            },
+            "xmlbuilder": {
+              "version": "9.0.7",
+              "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+              "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+            }
           }
         },
         "load-json-file": {
@@ -22727,11 +22693,11 @@
           "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
           "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
           "requires": {
-            "graceful-fs": "4.1.11",
-            "parse-json": "2.2.0",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1",
-            "strip-bom": "2.0.0"
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
           }
         },
         "loader-utils": {
@@ -22739,10 +22705,10 @@
           "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
           "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
           "requires": {
-            "big.js": "3.2.0",
-            "emojis-list": "2.1.0",
-            "json5": "0.5.1",
-            "object-assign": "4.1.1"
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
           },
           "dependencies": {
             "object-assign": {
@@ -22767,8 +22733,8 @@
           "resolved": "https://registry.npmjs.org/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz",
           "integrity": "sha1-XdLLVTctbnDg4jkvsjBNZjEJEHU=",
           "requires": {
-            "lodash.deburr": "3.2.0",
-            "lodash.words": "3.2.0"
+            "lodash.deburr": "^3.0.0",
+            "lodash.words": "^3.0.0"
           }
         },
         "lodash._getnative": {
@@ -22791,7 +22757,7 @@
           "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz",
           "integrity": "sha1-kyyLh/ikN3iXxnGXUzKC+Xrqwpg=",
           "requires": {
-            "lodash._createcompounder": "3.0.0"
+            "lodash._createcompounder": "^3.0.0"
           }
         },
         "lodash.clonedeep": {
@@ -22804,7 +22770,7 @@
           "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-3.2.0.tgz",
           "integrity": "sha1-baj1QzSjZqfPTEx2742Aqhs2XtU=",
           "requires": {
-            "lodash._root": "3.0.1"
+            "lodash._root": "^3.0.0"
           }
         },
         "lodash.frompairs": {
@@ -22827,9 +22793,9 @@
           "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
           "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
           "requires": {
-            "lodash._getnative": "3.9.1",
-            "lodash.isarguments": "3.1.0",
-            "lodash.isarray": "3.0.4"
+            "lodash._getnative": "^3.0.0",
+            "lodash.isarguments": "^3.0.0",
+            "lodash.isarray": "^3.0.0"
           }
         },
         "lodash.memoize": {
@@ -22837,6 +22803,16 @@
           "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
           "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
         },
+        "lodash.merge": {
+          "version": "4.6.2",
+          "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+          "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+        },
+        "lodash.throttle": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+          "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+        },
         "lodash.uniq": {
           "version": "4.5.0",
           "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -22847,7 +22823,7 @@
           "resolved": "https://registry.npmjs.org/lodash.words/-/lodash.words-3.2.0.tgz",
           "integrity": "sha1-TiqGSbwIdFsXxpWxo86P7llmI7M=",
           "requires": {
-            "lodash._root": "3.0.1"
+            "lodash._root": "^3.0.0"
           }
         },
         "lolex": {
@@ -22865,7 +22841,7 @@
           "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
           "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
           "requires": {
-            "js-tokens": "3.0.2"
+            "js-tokens": "^3.0.0"
           }
         },
         "loud-rejection": {
@@ -22873,8 +22849,8 @@
           "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
           "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
           "requires": {
-            "currently-unhandled": "0.4.1",
-            "signal-exit": "3.0.2"
+            "currently-unhandled": "^0.4.1",
+            "signal-exit": "^3.0.0"
           }
         },
         "lower-case": {
@@ -22882,13 +22858,21 @@
           "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
           "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
         },
+        "lower-case-first": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz",
+          "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=",
+          "requires": {
+            "lower-case": "^1.1.2"
+          }
+        },
         "lru-cache": {
           "version": "4.1.3",
           "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
           "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
           "requires": {
-            "pseudomap": "1.0.2",
-            "yallist": "2.1.2"
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
           }
         },
         "map-obj": {
@@ -22896,6 +22880,46 @@
           "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
           "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
         },
+        "material-ui": {
+          "version": "0.20.2",
+          "resolved": "https://registry.npmjs.org/material-ui/-/material-ui-0.20.2.tgz",
+          "integrity": "sha512-VeqgQkdvtK193w+FFvXDEwlVxI4rWk83eWbpYLeOIHDPWr3rbB9B075JRnJt/8IsI2X8q5Aia5W3+7m4KkleDg==",
+          "requires": {
+            "babel-runtime": "^6.23.0",
+            "inline-style-prefixer": "^3.0.8",
+            "keycode": "^2.1.8",
+            "lodash.merge": "^4.6.0",
+            "lodash.throttle": "^4.1.1",
+            "prop-types": "^15.5.7",
+            "react-event-listener": "^0.6.2",
+            "react-transition-group": "^1.2.1",
+            "recompose": "^0.26.0",
+            "simple-assign": "^0.1.0",
+            "warning": "^3.0.0"
+          },
+          "dependencies": {
+            "react-transition-group": {
+              "version": "1.2.1",
+              "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-1.2.1.tgz",
+              "integrity": "sha512-CWaL3laCmgAFdxdKbhhps+c0HRGF4c+hdM4H23+FI1QBNUyx/AMeIJGWorehPNSaKnQNOAxL7PQmqMu78CDj3Q==",
+              "requires": {
+                "chain-function": "^1.0.0",
+                "dom-helpers": "^3.2.0",
+                "loose-envify": "^1.3.1",
+                "prop-types": "^15.5.6",
+                "warning": "^3.0.0"
+              }
+            },
+            "warning": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+              "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+              "requires": {
+                "loose-envify": "^1.0.0"
+              }
+            }
+          }
+        },
         "math-expression-evaluator": {
           "version": "1.2.17",
           "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
@@ -22906,6 +22930,16 @@
           "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
           "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w="
         },
+        "md5": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
+          "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
+          "requires": {
+            "charenc": "~0.0.1",
+            "crypt": "~0.0.1",
+            "is-buffer": "~1.1.1"
+          }
+        },
         "media-typer": {
           "version": "0.3.0",
           "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -22916,8 +22950,8 @@
           "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz",
           "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=",
           "requires": {
-            "errno": "0.1.7",
-            "readable-stream": "2.3.6"
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
           }
         },
         "meow": {
@@ -22925,16 +22959,16 @@
           "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
           "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
           "requires": {
-            "camelcase-keys": "2.1.0",
-            "decamelize": "1.2.0",
-            "loud-rejection": "1.6.0",
-            "map-obj": "1.0.1",
-            "minimist": "1.2.0",
-            "normalize-package-data": "2.4.0",
-            "object-assign": "4.1.1",
-            "read-pkg-up": "1.0.1",
-            "redent": "1.0.0",
-            "trim-newlines": "1.0.0"
+            "camelcase-keys": "^2.0.0",
+            "decamelize": "^1.1.2",
+            "loud-rejection": "^1.0.0",
+            "map-obj": "^1.0.1",
+            "minimist": "^1.1.3",
+            "normalize-package-data": "^2.3.4",
+            "object-assign": "^4.0.1",
+            "read-pkg-up": "^1.0.1",
+            "redent": "^1.0.0",
+            "trim-newlines": "^1.0.0"
           },
           "dependencies": {
             "minimist": {
@@ -22964,19 +22998,19 @@
           "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
           "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
           "requires": {
-            "arr-diff": "2.0.0",
-            "array-unique": "0.2.1",
-            "braces": "1.8.5",
-            "expand-brackets": "0.1.5",
-            "extglob": "0.3.2",
-            "filename-regex": "2.0.1",
-            "is-extglob": "1.0.0",
-            "is-glob": "2.0.1",
-            "kind-of": "3.2.2",
-            "normalize-path": "2.1.1",
-            "object.omit": "2.0.1",
-            "parse-glob": "3.0.4",
-            "regex-cache": "0.4.4"
+            "arr-diff": "^2.0.0",
+            "array-unique": "^0.2.1",
+            "braces": "^1.8.2",
+            "expand-brackets": "^0.1.4",
+            "extglob": "^0.3.1",
+            "filename-regex": "^2.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.1",
+            "kind-of": "^3.0.2",
+            "normalize-path": "^2.0.1",
+            "object.omit": "^2.0.0",
+            "parse-glob": "^3.0.4",
+            "regex-cache": "^0.4.2"
           }
         },
         "mime": {
@@ -22994,7 +23028,7 @@
           "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
           "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
           "requires": {
-            "mime-db": "1.33.0"
+            "mime-db": "~1.33.0"
           }
         },
         "minimatch": {
@@ -23002,7 +23036,7 @@
           "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
           "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
           "requires": {
-            "brace-expansion": "1.1.11"
+            "brace-expansion": "^1.1.7"
           }
         },
         "minimist": {
@@ -23043,6 +23077,14 @@
           "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
           "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg=="
         },
+        "ncname": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+          "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+          "requires": {
+            "xml-char-classes": "^1.0.0"
+          }
+        },
         "negotiator": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
@@ -23063,10 +23105,10 @@
           "resolved": "https://registry.npmjs.org/ngcomponent/-/ngcomponent-4.1.0.tgz",
           "integrity": "sha512-cGL3iVoqMWTpCfaIwgRKhdaGqiy2Z+CCG0cVfjlBvdqE8saj8xap9B4OTf+qwObxLVZmDTJPDgx3bN6Q/lZ7BQ==",
           "requires": {
-            "@types/angular": "1.6.50",
-            "@types/lodash": "4.14.116",
-            "angular": "1.7.2",
-            "lodash": "4.17.10"
+            "@types/angular": "^1.6.39",
+            "@types/lodash": "^4.14.85",
+            "angular": ">=1.5.0",
+            "lodash": "^4.17.4"
           }
         },
         "ngreact": {
@@ -23074,9 +23116,9 @@
           "resolved": "https://registry.npmjs.org/ngreact/-/ngreact-0.2.0.tgz",
           "integrity": "sha1-PaQ6SIFYPFTMUDXim7SNnhFnVYc=",
           "requires": {
-            "angular": "1.7.2",
-            "react": "15.6.2",
-            "react-dom": "15.6.2"
+            "angular": "<2.0.0",
+            "react": ">=0.14.0",
+            "react-dom": ">=0.14.0"
           }
         },
         "no-case": {
@@ -23084,7 +23126,7 @@
           "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
           "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
           "requires": {
-            "lower-case": "1.1.4"
+            "lower-case": "^1.1.1"
           }
         },
         "node-bourbon": {
@@ -23092,7 +23134,7 @@
           "resolved": "https://registry.npmjs.org/node-bourbon/-/node-bourbon-4.2.8.tgz",
           "integrity": "sha1-5ETx8JQ0q3ZQ6jGMKOLhA9P5Qs0=",
           "requires": {
-            "bourbon": "4.3.4"
+            "bourbon": "^4.2.6"
           }
         },
         "node-fetch": {
@@ -23100,8 +23142,8 @@
           "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
           "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
           "requires": {
-            "encoding": "0.1.12",
-            "is-stream": "1.1.0"
+            "encoding": "^0.1.11",
+            "is-stream": "^1.0.1"
           }
         },
         "node-gyp": {
@@ -23109,18 +23151,18 @@
           "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz",
           "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==",
           "requires": {
-            "fstream": "1.0.11",
-            "glob": "7.1.2",
-            "graceful-fs": "4.1.11",
-            "mkdirp": "0.5.1",
-            "nopt": "3.0.6",
-            "npmlog": "4.1.2",
-            "osenv": "0.1.5",
-            "request": "2.81.0",
-            "rimraf": "2.6.2",
-            "semver": "5.3.0",
-            "tar": "2.2.1",
-            "which": "1.3.1"
+            "fstream": "^1.0.0",
+            "glob": "^7.0.3",
+            "graceful-fs": "^4.1.2",
+            "mkdirp": "^0.5.0",
+            "nopt": "2 || 3",
+            "npmlog": "0 || 1 || 2 || 3 || 4",
+            "osenv": "0",
+            "request": ">=2.9.0 <2.82.0",
+            "rimraf": "2",
+            "semver": "~5.3.0",
+            "tar": "^2.0.0",
+            "which": "1"
           },
           "dependencies": {
             "form-data": {
@@ -23128,9 +23170,9 @@
               "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
               "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
               "requires": {
-                "asynckit": "0.4.0",
-                "combined-stream": "1.0.6",
-                "mime-types": "2.1.18"
+                "asynckit": "^0.4.0",
+                "combined-stream": "^1.0.5",
+                "mime-types": "^2.1.12"
               }
             },
             "glob": {
@@ -23138,12 +23180,12 @@
               "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
               "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
               "requires": {
-                "fs.realpath": "1.0.0",
-                "inflight": "1.0.6",
-                "inherits": "2.0.3",
-                "minimatch": "3.0.4",
-                "once": "1.4.0",
-                "path-is-absolute": "1.0.1"
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
               }
             },
             "qs": {
@@ -23156,28 +23198,28 @@
               "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
               "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
               "requires": {
-                "aws-sign2": "0.6.0",
-                "aws4": "1.7.0",
-                "caseless": "0.12.0",
-                "combined-stream": "1.0.6",
-                "extend": "3.0.1",
-                "forever-agent": "0.6.1",
-                "form-data": "2.1.4",
-                "har-validator": "4.2.1",
-                "hawk": "3.1.3",
-                "http-signature": "1.1.1",
-                "is-typedarray": "1.0.0",
-                "isstream": "0.1.2",
-                "json-stringify-safe": "5.0.1",
-                "mime-types": "2.1.18",
-                "oauth-sign": "0.8.2",
-                "performance-now": "0.2.0",
-                "qs": "6.4.0",
-                "safe-buffer": "5.1.2",
-                "stringstream": "0.0.6",
-                "tough-cookie": "2.3.4",
-                "tunnel-agent": "0.6.0",
-                "uuid": "3.3.2"
+                "aws-sign2": "~0.6.0",
+                "aws4": "^1.2.1",
+                "caseless": "~0.12.0",
+                "combined-stream": "~1.0.5",
+                "extend": "~3.0.0",
+                "forever-agent": "~0.6.1",
+                "form-data": "~2.1.1",
+                "har-validator": "~4.2.1",
+                "hawk": "~3.1.3",
+                "http-signature": "~1.1.0",
+                "is-typedarray": "~1.0.0",
+                "isstream": "~0.1.2",
+                "json-stringify-safe": "~5.0.1",
+                "mime-types": "~2.1.7",
+                "oauth-sign": "~0.8.1",
+                "performance-now": "^0.2.0",
+                "qs": "~6.4.0",
+                "safe-buffer": "^5.0.1",
+                "stringstream": "~0.0.4",
+                "tough-cookie": "~2.3.0",
+                "tunnel-agent": "^0.6.0",
+                "uuid": "^3.0.0"
               }
             },
             "semver": {
@@ -23192,28 +23234,28 @@
           "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz",
           "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=",
           "requires": {
-            "assert": "1.4.1",
-            "browserify-zlib": "0.1.4",
-            "buffer": "4.9.1",
-            "console-browserify": "1.1.0",
-            "constants-browserify": "1.0.0",
+            "assert": "^1.1.1",
+            "browserify-zlib": "^0.1.4",
+            "buffer": "^4.9.0",
+            "console-browserify": "^1.1.0",
+            "constants-browserify": "^1.0.0",
             "crypto-browserify": "3.3.0",
-            "domain-browser": "1.2.0",
-            "events": "1.1.1",
+            "domain-browser": "^1.1.1",
+            "events": "^1.0.0",
             "https-browserify": "0.0.1",
-            "os-browserify": "0.2.1",
+            "os-browserify": "^0.2.0",
             "path-browserify": "0.0.0",
-            "process": "0.11.10",
-            "punycode": "1.4.1",
-            "querystring-es3": "0.2.1",
-            "readable-stream": "2.3.6",
-            "stream-browserify": "2.0.1",
-            "stream-http": "2.8.3",
-            "string_decoder": "0.10.31",
-            "timers-browserify": "2.0.10",
+            "process": "^0.11.0",
+            "punycode": "^1.2.4",
+            "querystring-es3": "^0.2.0",
+            "readable-stream": "^2.0.5",
+            "stream-browserify": "^2.0.1",
+            "stream-http": "^2.3.1",
+            "string_decoder": "^0.10.25",
+            "timers-browserify": "^2.0.2",
             "tty-browserify": "0.0.0",
-            "url": "0.11.0",
-            "util": "0.10.4",
+            "url": "^0.11.0",
+            "util": "^0.10.3",
             "vm-browserify": "0.0.4"
           },
           "dependencies": {
@@ -23238,7 +23280,7 @@
           "integrity": "sha1-OEcpELgV4mG4sbmbpRmZRGWhXCE=",
           "requires": {
             "bourbon-neat": "1.7.2",
-            "node-bourbon": "4.2.8"
+            "node-bourbon": "^4.2.3"
           }
         },
         "node-sass": {
@@ -23246,22 +23288,22 @@
           "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-3.13.1.tgz",
           "integrity": "sha1-ckD7v/I5YwS0IjUn7TAgWJwAT8I=",
           "requires": {
-            "async-foreach": "0.1.3",
-            "chalk": "1.1.3",
-            "cross-spawn": "3.0.1",
-            "gaze": "1.1.3",
-            "get-stdin": "4.0.1",
-            "glob": "7.1.2",
-            "in-publish": "2.0.0",
-            "lodash.assign": "4.2.0",
-            "lodash.clonedeep": "4.5.0",
-            "meow": "3.7.0",
-            "mkdirp": "0.5.1",
-            "nan": "2.10.0",
-            "node-gyp": "3.7.0",
-            "npmlog": "4.1.2",
-            "request": "2.87.0",
-            "sass-graph": "2.2.4"
+            "async-foreach": "^0.1.3",
+            "chalk": "^1.1.1",
+            "cross-spawn": "^3.0.0",
+            "gaze": "^1.0.0",
+            "get-stdin": "^4.0.1",
+            "glob": "^7.0.3",
+            "in-publish": "^2.0.0",
+            "lodash.assign": "^4.2.0",
+            "lodash.clonedeep": "^4.3.2",
+            "meow": "^3.7.0",
+            "mkdirp": "^0.5.1",
+            "nan": "^2.3.2",
+            "node-gyp": "^3.3.1",
+            "npmlog": "^4.0.0",
+            "request": "^2.61.0",
+            "sass-graph": "^2.1.1"
           },
           "dependencies": {
             "glob": {
@@ -23269,12 +23311,12 @@
               "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
               "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
               "requires": {
-                "fs.realpath": "1.0.0",
-                "inflight": "1.0.6",
-                "inherits": "2.0.3",
-                "minimatch": "3.0.4",
-                "once": "1.4.0",
-                "path-is-absolute": "1.0.1"
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
               }
             }
           }
@@ -23284,8 +23326,8 @@
           "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
           "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
           "requires": {
-            "chalk": "0.4.0",
-            "underscore": "1.6.0"
+            "chalk": "~0.4.0",
+            "underscore": "~1.6.0"
           },
           "dependencies": {
             "ansi-styles": {
@@ -23298,9 +23340,9 @@
               "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
               "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
               "requires": {
-                "ansi-styles": "1.0.0",
-                "has-color": "0.1.7",
-                "strip-ansi": "0.1.1"
+                "ansi-styles": "~1.0.0",
+                "has-color": "~0.1.0",
+                "strip-ansi": "~0.1.0"
               }
             },
             "strip-ansi": {
@@ -23315,7 +23357,7 @@
           "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
           "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
           "requires": {
-            "abbrev": "1.1.1"
+            "abbrev": "1"
           }
         },
         "normalize-package-data": {
@@ -23323,10 +23365,10 @@
           "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
           "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
           "requires": {
-            "hosted-git-info": "2.6.1",
-            "is-builtin-module": "1.0.0",
-            "semver": "5.5.0",
-            "validate-npm-package-license": "3.0.3"
+            "hosted-git-info": "^2.1.4",
+            "is-builtin-module": "^1.0.0",
+            "semver": "2 || 3 || 4 || 5",
+            "validate-npm-package-license": "^3.0.1"
           }
         },
         "normalize-path": {
@@ -23334,7 +23376,7 @@
           "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
           "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
           "requires": {
-            "remove-trailing-separator": "1.1.0"
+            "remove-trailing-separator": "^1.0.1"
           }
         },
         "normalize-range": {
@@ -23347,10 +23389,10 @@
           "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
           "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
           "requires": {
-            "object-assign": "4.1.1",
-            "prepend-http": "1.0.4",
-            "query-string": "4.3.4",
-            "sort-keys": "1.1.2"
+            "object-assign": "^4.0.1",
+            "prepend-http": "^1.0.0",
+            "query-string": "^4.1.0",
+            "sort-keys": "^1.0.0"
           },
           "dependencies": {
             "object-assign": {
@@ -23360,15 +23402,30 @@
             }
           }
         },
+        "normalizr": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/normalizr/-/normalizr-1.4.1.tgz",
+          "integrity": "sha1-qjh8JGXxNhHK86rkK6+Y9wXoos4=",
+          "requires": {
+            "lodash": "^3.10.0"
+          },
+          "dependencies": {
+            "lodash": {
+              "version": "3.10.1",
+              "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+              "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+            }
+          }
+        },
         "npmlog": {
           "version": "4.1.2",
           "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
           "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
           "requires": {
-            "are-we-there-yet": "1.1.5",
-            "console-control-strings": "1.1.0",
-            "gauge": "2.7.4",
-            "set-blocking": "2.0.0"
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
           }
         },
         "nth-check": {
@@ -23376,7 +23433,7 @@
           "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
           "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
           "requires": {
-            "boolbase": "1.0.0"
+            "boolbase": "~1.0.0"
           }
         },
         "num2fraction": {
@@ -23414,8 +23471,8 @@
           "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
           "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
           "requires": {
-            "for-own": "0.1.5",
-            "is-extendable": "0.1.1"
+            "for-own": "^0.1.4",
+            "is-extendable": "^0.1.1"
           }
         },
         "on-finished": {
@@ -23436,7 +23493,7 @@
           "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
           "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
           "requires": {
-            "wrappy": "1.0.2"
+            "wrappy": "1"
           }
         },
         "onetime": {
@@ -23454,7 +23511,7 @@
           "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
           "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
           "requires": {
-            "wordwrap": "0.0.3"
+            "wordwrap": "~0.0.2"
           }
         },
         "optionator": {
@@ -23462,12 +23519,12 @@
           "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
           "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
           "requires": {
-            "deep-is": "0.1.3",
-            "fast-levenshtein": "2.0.6",
-            "levn": "0.3.0",
-            "prelude-ls": "1.1.2",
-            "type-check": "0.3.2",
-            "wordwrap": "1.0.0"
+            "deep-is": "~0.1.3",
+            "fast-levenshtein": "~2.0.4",
+            "levn": "~0.3.0",
+            "prelude-ls": "~1.1.2",
+            "type-check": "~0.3.2",
+            "wordwrap": "~1.0.0"
           },
           "dependencies": {
             "wordwrap": {
@@ -23482,7 +23539,7 @@
           "resolved": "https://registry.npmjs.org/original/-/original-1.0.1.tgz",
           "integrity": "sha512-IEvtB5vM5ULvwnqMxWBLxkS13JIEXbakizMSo3yoPNPCIWzg8TG3Usn/UhXoZFM/m+FuEA20KdzPSFq/0rS+UA==",
           "requires": {
-            "url-parse": "1.4.1"
+            "url-parse": "~1.4.0"
           }
         },
         "os-browserify": {
@@ -23500,7 +23557,7 @@
           "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
           "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
           "requires": {
-            "lcid": "1.0.0"
+            "lcid": "^1.0.0"
           }
         },
         "os-tmpdir": {
@@ -23513,8 +23570,8 @@
           "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
           "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
           "requires": {
-            "os-homedir": "1.0.2",
-            "os-tmpdir": "1.0.2"
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
           }
         },
         "pako": {
@@ -23527,7 +23584,7 @@
           "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
           "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
           "requires": {
-            "no-case": "2.3.2"
+            "no-case": "^2.2.0"
           }
         },
         "parse-glob": {
@@ -23535,10 +23592,10 @@
           "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
           "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
           "requires": {
-            "glob-base": "0.3.0",
-            "is-dotfile": "1.0.3",
-            "is-extglob": "1.0.0",
-            "is-glob": "2.0.1"
+            "glob-base": "^0.3.0",
+            "is-dotfile": "^1.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.0"
           }
         },
         "parse-json": {
@@ -23546,7 +23603,7 @@
           "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
           "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
           "requires": {
-            "error-ex": "1.3.2"
+            "error-ex": "^1.2.0"
           }
         },
         "parseurl": {
@@ -23554,17 +23611,45 @@
           "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
           "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
         },
+        "pascal-case": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz",
+          "integrity": "sha1-Pl1kogBDgwp8STRMLXS0G+DJyZs=",
+          "requires": {
+            "camel-case": "^1.1.1",
+            "upper-case-first": "^1.1.0"
+          },
+          "dependencies": {
+            "camel-case": {
+              "version": "1.2.2",
+              "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz",
+              "integrity": "sha1-Gsp8TRlTWaLOmVV5NDPG5VQlEfI=",
+              "requires": {
+                "sentence-case": "^1.1.1",
+                "upper-case": "^1.1.1"
+              }
+            }
+          }
+        },
         "path-browserify": {
           "version": "0.0.0",
           "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
           "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
         },
+        "path-case": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz",
+          "integrity": "sha1-UM5roNO+090LXCqcRVNpdDRAlRQ=",
+          "requires": {
+            "sentence-case": "^1.1.2"
+          }
+        },
         "path-exists": {
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         },
         "path-is-absolute": {
@@ -23592,9 +23677,9 @@
           "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "requires": {
-            "graceful-fs": "4.1.11",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "pbkdf2-compat": {
@@ -23627,7 +23712,7 @@
           "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
           "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
           "requires": {
-            "pinkie": "2.0.4"
+            "pinkie": "^2.0.0"
           }
         },
         "pkg-dir": {
@@ -23635,7 +23720,7 @@
           "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
           "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
           "requires": {
-            "find-up": "1.1.2"
+            "find-up": "^1.0.0"
           }
         },
         "pluralize": {
@@ -23643,15 +23728,20 @@
           "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
           "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU="
         },
+        "popper.js": {
+          "version": "1.15.0",
+          "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
+          "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA=="
+        },
         "postcss": {
           "version": "5.2.18",
           "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
           "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
           "requires": {
-            "chalk": "1.1.3",
-            "js-base64": "2.4.5",
-            "source-map": "0.5.7",
-            "supports-color": "3.2.3"
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
           },
           "dependencies": {
             "source-map": {
@@ -23664,7 +23754,7 @@
               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
               "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
               "requires": {
-                "has-flag": "1.0.0"
+                "has-flag": "^1.0.0"
               }
             }
           }
@@ -23674,9 +23764,9 @@
           "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
           "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
           "requires": {
-            "postcss": "5.2.18",
-            "postcss-message-helpers": "2.0.0",
-            "reduce-css-calc": "1.3.0"
+            "postcss": "^5.0.2",
+            "postcss-message-helpers": "^2.0.0",
+            "reduce-css-calc": "^1.2.6"
           }
         },
         "postcss-colormin": {
@@ -23684,9 +23774,9 @@
           "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
           "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
           "requires": {
-            "colormin": "1.1.2",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "colormin": "^1.0.5",
+            "postcss": "^5.0.13",
+            "postcss-value-parser": "^3.2.3"
           }
         },
         "postcss-convert-values": {
@@ -23694,8 +23784,8 @@
           "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
           "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
           "requires": {
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "postcss": "^5.0.11",
+            "postcss-value-parser": "^3.1.2"
           }
         },
         "postcss-discard-comments": {
@@ -23703,7 +23793,7 @@
           "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
           "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
           "requires": {
-            "postcss": "5.2.18"
+            "postcss": "^5.0.14"
           }
         },
         "postcss-discard-duplicates": {
@@ -23711,7 +23801,7 @@
           "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
           "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
           "requires": {
-            "postcss": "5.2.18"
+            "postcss": "^5.0.4"
           }
         },
         "postcss-discard-empty": {
@@ -23719,7 +23809,7 @@
           "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
           "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
           "requires": {
-            "postcss": "5.2.18"
+            "postcss": "^5.0.14"
           }
         },
         "postcss-discard-overridden": {
@@ -23727,7 +23817,7 @@
           "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
           "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
           "requires": {
-            "postcss": "5.2.18"
+            "postcss": "^5.0.16"
           }
         },
         "postcss-discard-unused": {
@@ -23735,8 +23825,8 @@
           "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
           "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
           "requires": {
-            "postcss": "5.2.18",
-            "uniqs": "2.0.0"
+            "postcss": "^5.0.14",
+            "uniqs": "^2.0.0"
           }
         },
         "postcss-filter-plugins": {
@@ -23744,7 +23834,7 @@
           "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
           "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
           "requires": {
-            "postcss": "5.2.18"
+            "postcss": "^5.0.4"
           }
         },
         "postcss-merge-idents": {
@@ -23752,9 +23842,9 @@
           "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
           "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
           "requires": {
-            "has": "1.0.3",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "has": "^1.0.1",
+            "postcss": "^5.0.10",
+            "postcss-value-parser": "^3.1.1"
           }
         },
         "postcss-merge-longhand": {
@@ -23762,7 +23852,7 @@
           "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
           "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
           "requires": {
-            "postcss": "5.2.18"
+            "postcss": "^5.0.4"
           }
         },
         "postcss-merge-rules": {
@@ -23770,11 +23860,11 @@
           "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
           "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
           "requires": {
-            "browserslist": "1.7.7",
-            "caniuse-api": "1.6.1",
-            "postcss": "5.2.18",
-            "postcss-selector-parser": "2.2.3",
-            "vendors": "1.0.2"
+            "browserslist": "^1.5.2",
+            "caniuse-api": "^1.5.2",
+            "postcss": "^5.0.4",
+            "postcss-selector-parser": "^2.2.2",
+            "vendors": "^1.0.0"
           }
         },
         "postcss-message-helpers": {
@@ -23787,9 +23877,9 @@
           "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
           "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
           "requires": {
-            "object-assign": "4.1.1",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "object-assign": "^4.0.1",
+            "postcss": "^5.0.4",
+            "postcss-value-parser": "^3.0.2"
           },
           "dependencies": {
             "object-assign": {
@@ -23804,8 +23894,8 @@
           "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
           "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
           "requires": {
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "postcss": "^5.0.12",
+            "postcss-value-parser": "^3.3.0"
           }
         },
         "postcss-minify-params": {
@@ -23813,10 +23903,10 @@
           "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
           "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
           "requires": {
-            "alphanum-sort": "1.0.2",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0",
-            "uniqs": "2.0.0"
+            "alphanum-sort": "^1.0.1",
+            "postcss": "^5.0.2",
+            "postcss-value-parser": "^3.0.2",
+            "uniqs": "^2.0.0"
           }
         },
         "postcss-minify-selectors": {
@@ -23824,10 +23914,10 @@
           "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
           "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
           "requires": {
-            "alphanum-sort": "1.0.2",
-            "has": "1.0.3",
-            "postcss": "5.2.18",
-            "postcss-selector-parser": "2.2.3"
+            "alphanum-sort": "^1.0.2",
+            "has": "^1.0.1",
+            "postcss": "^5.0.14",
+            "postcss-selector-parser": "^2.0.0"
           }
         },
         "postcss-modules-extract-imports": {
@@ -23835,7 +23925,7 @@
           "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
           "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
           "requires": {
-            "postcss": "6.0.23"
+            "postcss": "^6.0.1"
           },
           "dependencies": {
             "ansi-styles": {
@@ -23843,7 +23933,7 @@
               "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
               "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
               "requires": {
-                "color-convert": "1.9.2"
+                "color-convert": "^1.9.0"
               }
             },
             "chalk": {
@@ -23851,9 +23941,9 @@
               "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
               "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
               "requires": {
-                "ansi-styles": "3.2.1",
-                "escape-string-regexp": "1.0.5",
-                "supports-color": "5.4.0"
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
               }
             },
             "has-flag": {
@@ -23866,9 +23956,9 @@
               "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
               "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
               "requires": {
-                "chalk": "2.4.1",
-                "source-map": "0.6.1",
-                "supports-color": "5.4.0"
+                "chalk": "^2.4.1",
+                "source-map": "^0.6.1",
+                "supports-color": "^5.4.0"
               }
             },
             "source-map": {
@@ -23881,7 +23971,7 @@
               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
               "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
               "requires": {
-                "has-flag": "3.0.0"
+                "has-flag": "^3.0.0"
               }
             }
           }
@@ -23891,8 +23981,8 @@
           "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
           "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
           "requires": {
-            "css-selector-tokenizer": "0.7.0",
-            "postcss": "6.0.23"
+            "css-selector-tokenizer": "^0.7.0",
+            "postcss": "^6.0.1"
           },
           "dependencies": {
             "ansi-styles": {
@@ -23900,7 +23990,7 @@
               "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
               "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
               "requires": {
-                "color-convert": "1.9.2"
+                "color-convert": "^1.9.0"
               }
             },
             "chalk": {
@@ -23908,9 +23998,9 @@
               "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
               "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
               "requires": {
-                "ansi-styles": "3.2.1",
-                "escape-string-regexp": "1.0.5",
-                "supports-color": "5.4.0"
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
               }
             },
             "css-selector-tokenizer": {
@@ -23918,9 +24008,9 @@
               "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
               "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
               "requires": {
-                "cssesc": "0.1.0",
-                "fastparse": "1.1.1",
-                "regexpu-core": "1.0.0"
+                "cssesc": "^0.1.0",
+                "fastparse": "^1.1.1",
+                "regexpu-core": "^1.0.0"
               }
             },
             "has-flag": {
@@ -23933,9 +24023,9 @@
               "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
               "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
               "requires": {
-                "chalk": "2.4.1",
-                "source-map": "0.6.1",
-                "supports-color": "5.4.0"
+                "chalk": "^2.4.1",
+                "source-map": "^0.6.1",
+                "supports-color": "^5.4.0"
               }
             },
             "regexpu-core": {
@@ -23943,9 +24033,9 @@
               "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
               "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
               "requires": {
-                "regenerate": "1.4.0",
-                "regjsgen": "0.2.0",
-                "regjsparser": "0.1.5"
+                "regenerate": "^1.2.1",
+                "regjsgen": "^0.2.0",
+                "regjsparser": "^0.1.4"
               }
             },
             "source-map": {
@@ -23958,7 +24048,7 @@
               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
               "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
               "requires": {
-                "has-flag": "3.0.0"
+                "has-flag": "^3.0.0"
               }
             }
           }
@@ -23968,8 +24058,8 @@
           "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
           "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
           "requires": {
-            "css-selector-tokenizer": "0.7.0",
-            "postcss": "6.0.23"
+            "css-selector-tokenizer": "^0.7.0",
+            "postcss": "^6.0.1"
           },
           "dependencies": {
             "ansi-styles": {
@@ -23977,7 +24067,7 @@
               "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
               "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
               "requires": {
-                "color-convert": "1.9.2"
+                "color-convert": "^1.9.0"
               }
             },
             "chalk": {
@@ -23985,9 +24075,9 @@
               "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
               "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
               "requires": {
-                "ansi-styles": "3.2.1",
-                "escape-string-regexp": "1.0.5",
-                "supports-color": "5.4.0"
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
               }
             },
             "css-selector-tokenizer": {
@@ -23995,9 +24085,9 @@
               "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
               "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
               "requires": {
-                "cssesc": "0.1.0",
-                "fastparse": "1.1.1",
-                "regexpu-core": "1.0.0"
+                "cssesc": "^0.1.0",
+                "fastparse": "^1.1.1",
+                "regexpu-core": "^1.0.0"
               }
             },
             "has-flag": {
@@ -24010,9 +24100,9 @@
               "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
               "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
               "requires": {
-                "chalk": "2.4.1",
-                "source-map": "0.6.1",
-                "supports-color": "5.4.0"
+                "chalk": "^2.4.1",
+                "source-map": "^0.6.1",
+                "supports-color": "^5.4.0"
               }
             },
             "regexpu-core": {
@@ -24020,9 +24110,9 @@
               "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
               "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
               "requires": {
-                "regenerate": "1.4.0",
-                "regjsgen": "0.2.0",
-                "regjsparser": "0.1.5"
+                "regenerate": "^1.2.1",
+                "regjsgen": "^0.2.0",
+                "regjsparser": "^0.1.4"
               }
             },
             "source-map": {
@@ -24035,7 +24125,7 @@
               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
               "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
               "requires": {
-                "has-flag": "3.0.0"
+                "has-flag": "^3.0.0"
               }
             }
           }
@@ -24045,8 +24135,8 @@
           "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
           "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
           "requires": {
-            "icss-replace-symbols": "1.1.0",
-            "postcss": "6.0.23"
+            "icss-replace-symbols": "^1.1.0",
+            "postcss": "^6.0.1"
           },
           "dependencies": {
             "ansi-styles": {
@@ -24054,7 +24144,7 @@
               "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
               "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
               "requires": {
-                "color-convert": "1.9.2"
+                "color-convert": "^1.9.0"
               }
             },
             "chalk": {
@@ -24062,9 +24152,9 @@
               "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
               "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
               "requires": {
-                "ansi-styles": "3.2.1",
-                "escape-string-regexp": "1.0.5",
-                "supports-color": "5.4.0"
+                "ansi-styles": "^3.2.1",
+                "escape-string-regexp": "^1.0.5",
+                "supports-color": "^5.3.0"
               }
             },
             "has-flag": {
@@ -24077,9 +24167,9 @@
               "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
               "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
               "requires": {
-                "chalk": "2.4.1",
-                "source-map": "0.6.1",
-                "supports-color": "5.4.0"
+                "chalk": "^2.4.1",
+                "source-map": "^0.6.1",
+                "supports-color": "^5.4.0"
               }
             },
             "source-map": {
@@ -24092,7 +24182,7 @@
               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
               "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
               "requires": {
-                "has-flag": "3.0.0"
+                "has-flag": "^3.0.0"
               }
             }
           }
@@ -24102,7 +24192,7 @@
           "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
           "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
           "requires": {
-            "postcss": "5.2.18"
+            "postcss": "^5.0.5"
           }
         },
         "postcss-normalize-url": {
@@ -24110,10 +24200,10 @@
           "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
           "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
           "requires": {
-            "is-absolute-url": "2.1.0",
-            "normalize-url": "1.9.1",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "is-absolute-url": "^2.0.0",
+            "normalize-url": "^1.4.0",
+            "postcss": "^5.0.14",
+            "postcss-value-parser": "^3.2.3"
           }
         },
         "postcss-ordered-values": {
@@ -24121,8 +24211,8 @@
           "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
           "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
           "requires": {
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "postcss": "^5.0.4",
+            "postcss-value-parser": "^3.0.1"
           }
         },
         "postcss-reduce-idents": {
@@ -24130,8 +24220,8 @@
           "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
           "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
           "requires": {
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "postcss": "^5.0.4",
+            "postcss-value-parser": "^3.0.2"
           }
         },
         "postcss-reduce-initial": {
@@ -24139,7 +24229,7 @@
           "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
           "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
           "requires": {
-            "postcss": "5.2.18"
+            "postcss": "^5.0.4"
           }
         },
         "postcss-reduce-transforms": {
@@ -24147,9 +24237,9 @@
           "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
           "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
           "requires": {
-            "has": "1.0.3",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0"
+            "has": "^1.0.1",
+            "postcss": "^5.0.8",
+            "postcss-value-parser": "^3.0.1"
           }
         },
         "postcss-selector-parser": {
@@ -24157,9 +24247,9 @@
           "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
           "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
           "requires": {
-            "flatten": "1.0.2",
-            "indexes-of": "1.0.1",
-            "uniq": "1.0.1"
+            "flatten": "^1.0.2",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
           }
         },
         "postcss-svgo": {
@@ -24167,10 +24257,10 @@
           "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
           "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
           "requires": {
-            "is-svg": "2.1.0",
-            "postcss": "5.2.18",
-            "postcss-value-parser": "3.3.0",
-            "svgo": "0.7.2"
+            "is-svg": "^2.0.0",
+            "postcss": "^5.0.14",
+            "postcss-value-parser": "^3.2.3",
+            "svgo": "^0.7.0"
           }
         },
         "postcss-unique-selectors": {
@@ -24178,9 +24268,9 @@
           "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
           "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
           "requires": {
-            "alphanum-sort": "1.0.2",
-            "postcss": "5.2.18",
-            "uniqs": "2.0.0"
+            "alphanum-sort": "^1.0.1",
+            "postcss": "^5.0.4",
+            "uniqs": "^2.0.0"
           }
         },
         "postcss-value-parser": {
@@ -24193,9 +24283,9 @@
           "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
           "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
           "requires": {
-            "has": "1.0.3",
-            "postcss": "5.2.18",
-            "uniqs": "2.0.0"
+            "has": "^1.0.1",
+            "postcss": "^5.0.4",
+            "uniqs": "^2.0.0"
           }
         },
         "prelude-ls": {
@@ -24218,8 +24308,8 @@
           "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
           "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
           "requires": {
-            "renderkid": "2.0.1",
-            "utila": "0.4.0"
+            "renderkid": "^2.0.1",
+            "utila": "~0.4"
           }
         },
         "private": {
@@ -24247,7 +24337,7 @@
           "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
           "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
           "requires": {
-            "asap": "2.0.6"
+            "asap": "~2.0.3"
           }
         },
         "prop-types": {
@@ -24255,8 +24345,8 @@
           "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
           "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
           "requires": {
-            "loose-envify": "1.3.1",
-            "object-assign": "4.1.1"
+            "loose-envify": "^1.3.1",
+            "object-assign": "^4.1.1"
           },
           "dependencies": {
             "object-assign": {
@@ -24271,7 +24361,7 @@
           "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
           "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
           "requires": {
-            "forwarded": "0.1.2",
+            "forwarded": "~0.1.2",
             "ipaddr.js": "1.6.0"
           }
         },
@@ -24305,8 +24395,8 @@
           "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
           "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
           "requires": {
-            "object-assign": "4.1.1",
-            "strict-uri-encode": "1.1.0"
+            "object-assign": "^4.1.0",
+            "strict-uri-encode": "^1.0.0"
           },
           "dependencies": {
             "object-assign": {
@@ -24337,7 +24427,7 @@
           "integrity": "sha1-zeKelMQJsW4Z3HCYuJtmWPlyHTs=",
           "requires": {
             "minimist": "0.0.8",
-            "through2": "0.4.2"
+            "through2": "~0.4.1"
           }
         },
         "randomatic": {
@@ -24345,9 +24435,9 @@
           "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
           "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
           "requires": {
-            "is-number": "4.0.0",
-            "kind-of": "6.0.2",
-            "math-random": "1.0.1"
+            "is-number": "^4.0.0",
+            "kind-of": "^6.0.0",
+            "math-random": "^1.0.1"
           },
           "dependencies": {
             "is-number": {
@@ -24391,7 +24481,7 @@
                 "depd": "1.1.1",
                 "inherits": "2.0.3",
                 "setprototypeof": "1.0.3",
-                "statuses": "1.4.0"
+                "statuses": ">= 1.3.1 < 2"
               }
             },
             "iconv-lite": {
@@ -24411,10 +24501,10 @@
           "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-2.4.3.tgz",
           "integrity": "sha512-h5KgyB5IXYR7iKpYFcMr54cuQ2eozPCZ11kbXPG5+6CWvmyJ+c0R/yjndVndiNk2G3MKcTMbJNdDv5DIckLAxQ==",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "dom-align": "1.8.0",
-            "prop-types": "15.6.2",
-            "rc-util": "4.5.1"
+            "babel-runtime": "^6.26.0",
+            "dom-align": "^1.7.0",
+            "prop-types": "^15.5.8",
+            "rc-util": "^4.0.4"
           }
         },
         "rc-animate": {
@@ -24422,9 +24512,9 @@
           "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.4.4.tgz",
           "integrity": "sha512-DjJLTUQj7XKKcuS8cczN0uOLfuSmgrVXFGieP1SZc87xUUTFGh8B/KjNmEtlfvxkSrSuVfb2rrEPER4SqKUtEA==",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "css-animation": "1.4.1",
-            "prop-types": "15.6.2"
+            "babel-runtime": "6.x",
+            "css-animation": "^1.3.2",
+            "prop-types": "15.x"
           }
         },
         "rc-slider": {
@@ -24432,13 +24522,13 @@
           "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.6.2.tgz",
           "integrity": "sha512-IZf/zSTXlvOoseOBjRgSGQywhxEUYiwhMrGOyTYraoihG7N5lKZZJtVM519eLMRG+SHYkpp7j7wAnGYnQ1TxUQ==",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "classnames": "2.2.6",
-            "prop-types": "15.6.2",
-            "rc-tooltip": "3.7.2",
-            "rc-util": "4.5.1",
-            "shallowequal": "1.1.0",
-            "warning": "3.0.0"
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.5",
+            "prop-types": "^15.5.4",
+            "rc-tooltip": "^3.7.0",
+            "rc-util": "^4.0.4",
+            "shallowequal": "^1.0.1",
+            "warning": "^3.0.0"
           },
           "dependencies": {
             "warning": {
@@ -24446,7 +24536,7 @@
               "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
               "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
               "requires": {
-                "loose-envify": "1.3.1"
+                "loose-envify": "^1.0.0"
               }
             }
           }
@@ -24456,9 +24546,9 @@
           "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-3.7.2.tgz",
           "integrity": "sha512-vsF29ohlfgr7lEP12aJ5j4U/4hzqSBYjWQo8I09re+q95v1o4nDjH1q/B3qFkf9aml2FbgdkJw9KYz/zXUgApA==",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "prop-types": "15.6.2",
-            "rc-trigger": "2.5.4"
+            "babel-runtime": "6.x",
+            "prop-types": "^15.5.8",
+            "rc-trigger": "^2.2.2"
           }
         },
         "rc-trigger": {
@@ -24466,12 +24556,12 @@
           "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-2.5.4.tgz",
           "integrity": "sha512-clgXOdazDW2qg4vTZSAExpvOuojPNuMoamG+SxAm5Ih+rpVcrtEiDlDZWY4yUHyfEWJZBzgbrr4np/z2FK6RfA==",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "classnames": "2.2.6",
-            "prop-types": "15.6.2",
-            "rc-align": "2.4.3",
-            "rc-animate": "2.4.4",
-            "rc-util": "4.5.1"
+            "babel-runtime": "6.x",
+            "classnames": "^2.2.6",
+            "prop-types": "15.x",
+            "rc-align": "^2.4.0",
+            "rc-animate": "2.x",
+            "rc-util": "^4.4.0"
           }
         },
         "rc-util": {
@@ -24479,10 +24569,10 @@
           "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.5.1.tgz",
           "integrity": "sha512-PdCmHyBBodZdw6Oaikt0l+/R79IcRXpYkTrqD/Rbl4ZdoOi61t5TtEe40Q+A7rkWG5U1xjcN+h8j9H6GdtnICw==",
           "requires": {
-            "add-dom-event-listener": "1.0.2",
-            "babel-runtime": "6.26.0",
-            "prop-types": "15.6.2",
-            "shallowequal": "0.2.2"
+            "add-dom-event-listener": "1.x",
+            "babel-runtime": "6.x",
+            "prop-types": "^15.5.10",
+            "shallowequal": "^0.2.2"
           },
           "dependencies": {
             "shallowequal": {
@@ -24490,7 +24580,7 @@
               "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-0.2.2.tgz",
               "integrity": "sha1-HjL9W8q2rWiKSBLLDMBO/HXHAU4=",
               "requires": {
-                "lodash.keys": "3.1.2"
+                "lodash.keys": "^3.1.2"
               }
             }
           }
@@ -24500,11 +24590,43 @@
           "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz",
           "integrity": "sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=",
           "requires": {
-            "create-react-class": "15.6.3",
-            "fbjs": "0.8.17",
-            "loose-envify": "1.3.1",
-            "object-assign": "4.1.1",
-            "prop-types": "15.6.2"
+            "create-react-class": "^15.6.0",
+            "fbjs": "^0.8.9",
+            "loose-envify": "^1.1.0",
+            "object-assign": "^4.1.0",
+            "prop-types": "^15.5.10"
+          },
+          "dependencies": {
+            "object-assign": {
+              "version": "4.1.1",
+              "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+              "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+            }
+          }
+        },
+        "react-addons-pure-render-mixin": {
+          "version": "15.6.2",
+          "resolved": "https://registry.npmjs.org/react-addons-pure-render-mixin/-/react-addons-pure-render-mixin-15.6.2.tgz",
+          "integrity": "sha1-a4P0C2s27kBzXL1hJes/E84c3ck=",
+          "requires": {
+            "fbjs": "^0.8.4",
+            "object-assign": "^4.1.0"
+          },
+          "dependencies": {
+            "object-assign": {
+              "version": "4.1.1",
+              "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+              "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+            }
+          }
+        },
+        "react-addons-update": {
+          "version": "15.6.2",
+          "resolved": "https://registry.npmjs.org/react-addons-update/-/react-addons-update-15.6.2.tgz",
+          "integrity": "sha1-5TdTxbNIh5dFEMiC1/sHWFHV5QQ=",
+          "requires": {
+            "fbjs": "^0.8.9",
+            "object-assign": "^4.1.0"
           },
           "dependencies": {
             "object-assign": {
@@ -24514,15 +24636,43 @@
             }
           }
         },
+        "react-avatar": {
+          "version": "2.5.1",
+          "resolved": "https://registry.npmjs.org/react-avatar/-/react-avatar-2.5.1.tgz",
+          "integrity": "sha512-bwH5pWY6uxaKZt+IZBfD+SU3Dpy3FaKbmAzrOI4N8SATUPLXOdGaJHWUl6Vl8hHSwWSsoLh/m7xYHdnn0lofZw==",
+          "requires": {
+            "babel-runtime": ">=5.0.0",
+            "is-retina": "^1.0.3",
+            "md5": "^2.0.0"
+          }
+        },
+        "react-datetime": {
+          "version": "2.16.3",
+          "resolved": "https://registry.npmjs.org/react-datetime/-/react-datetime-2.16.3.tgz",
+          "integrity": "sha512-amWfb5iGEiyqjLmqCLlPpu2oN415jK8wX1qoTq7qn6EYiU7qQgbNHglww014PT4O/3G5eo/3kbJu/M/IxxTyGw==",
+          "requires": {
+            "create-react-class": "^15.5.2",
+            "object-assign": "^3.0.0",
+            "prop-types": "^15.5.7",
+            "react-onclickoutside": "^6.5.0"
+          },
+          "dependencies": {
+            "object-assign": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+              "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I="
+            }
+          }
+        },
         "react-dom": {
           "version": "15.6.2",
           "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz",
           "integrity": "sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=",
           "requires": {
-            "fbjs": "0.8.17",
-            "loose-envify": "1.3.1",
-            "object-assign": "4.1.1",
-            "prop-types": "15.6.2"
+            "fbjs": "^0.8.9",
+            "loose-envify": "^1.1.0",
+            "object-assign": "^4.1.0",
+            "prop-types": "^15.5.10"
           },
           "dependencies": {
             "object-assign": {
@@ -24532,25 +24682,59 @@
             }
           }
         },
+        "react-dropzone": {
+          "version": "3.13.4",
+          "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-3.13.4.tgz",
+          "integrity": "sha1-hNomgVxAM5aRxJtFRMLvehaRLMw=",
+          "requires": {
+            "attr-accept": "^1.0.3",
+            "prop-types": "^15.5.7"
+          }
+        },
+        "react-event-listener": {
+          "version": "0.6.6",
+          "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz",
+          "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==",
+          "requires": {
+            "@babel/runtime": "^7.2.0",
+            "prop-types": "^15.6.0",
+            "warning": "^4.0.1"
+          },
+          "dependencies": {
+            "warning": {
+              "version": "4.0.3",
+              "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+              "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+              "requires": {
+                "loose-envify": "^1.0.0"
+              }
+            }
+          }
+        },
         "react-input-autosize": {
           "version": "0.6.13",
           "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-0.6.13.tgz",
           "integrity": "sha1-OG/3qdLD3AFsJlvy5Z05cFD2Wvc="
         },
+        "react-is": {
+          "version": "16.8.6",
+          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
+        },
         "react-jade": {
           "version": "2.5.0",
           "resolved": "https://registry.npmjs.org/react-jade/-/react-jade-2.5.0.tgz",
           "integrity": "sha1-w02dLdPuoB9S/UnMKIpcGmh8lIw=",
           "requires": {
-            "acorn": "1.2.2",
-            "constantinople": "3.0.2",
-            "ent": "2.2.0",
+            "acorn": "^1.1.0",
+            "constantinople": "^3.0.1",
+            "ent": "^2.2.0",
             "jade": "1.9.2",
-            "js-stringify": "1.0.2",
-            "resolve": "1.8.1",
-            "static-module": "1.5.0",
-            "uglify-js": "2.8.29",
-            "with": "5.1.1"
+            "js-stringify": "^1.0.1",
+            "resolve": "^1.1.6",
+            "static-module": "^1.1.2",
+            "uglify-js": "^2.4.21",
+            "with": "^5.0.0"
           },
           "dependencies": {
             "acorn": {
@@ -24569,12 +24753,12 @@
               "integrity": "sha1-C4n5xg1OrSc46Ca6eyzKyaVwKr4=",
               "requires": {
                 "character-parser": "1.2.1",
-                "commander": "2.6.0",
-                "constantinople": "3.0.2",
-                "mkdirp": "0.5.1",
+                "commander": "~2.6.0",
+                "constantinople": "~3.0.1",
+                "mkdirp": "~0.5.0",
                 "transformers": "2.1.0",
-                "void-elements": "2.0.1",
-                "with": "4.0.3"
+                "void-elements": "~2.0.1",
+                "with": "~4.0.0"
               },
               "dependencies": {
                 "with": {
@@ -24582,8 +24766,8 @@
                   "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz",
                   "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
                   "requires": {
-                    "acorn": "1.2.2",
-                    "acorn-globals": "1.0.9"
+                    "acorn": "^1.0.1",
+                    "acorn-globals": "^1.0.3"
                   }
                 }
               }
@@ -24598,9 +24782,9 @@
               "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
               "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
               "requires": {
-                "source-map": "0.5.7",
-                "uglify-to-browserify": "1.0.2",
-                "yargs": "3.10.0"
+                "source-map": "~0.5.1",
+                "uglify-to-browserify": "~1.0.0",
+                "yargs": "~3.10.0"
               }
             },
             "with": {
@@ -24608,8 +24792,8 @@
               "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz",
               "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=",
               "requires": {
-                "acorn": "3.3.0",
-                "acorn-globals": "3.1.0"
+                "acorn": "^3.1.0",
+                "acorn-globals": "^3.0.0"
               },
               "dependencies": {
                 "acorn": {
@@ -24622,7 +24806,7 @@
                   "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
                   "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
                   "requires": {
-                    "acorn": "4.0.13"
+                    "acorn": "^4.0.4"
                   },
                   "dependencies": {
                     "acorn": {
@@ -24636,17 +24820,116 @@
             }
           }
         },
+        "react-lazy-cache": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/react-lazy-cache/-/react-lazy-cache-3.0.1.tgz",
+          "integrity": "sha1-DcZNON8XZ+93Z4xclBkAZMsRsM0=",
+          "requires": {
+            "deep-equal": "^1.0.1"
+          }
+        },
+        "react-lifecycles-compat": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+          "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+        },
+        "react-onclickoutside": {
+          "version": "6.8.0",
+          "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.8.0.tgz",
+          "integrity": "sha512-5Q4Rn7QLEoh7WIe66KFvYIpWJ49GeHoygP1/EtJyZjXKgrWH19Tf0Ty3lWyQzrEEDyLOwUvvmBFSE3dcDdvagA=="
+        },
+        "react-popper": {
+          "version": "0.7.5",
+          "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.7.5.tgz",
+          "integrity": "sha512-ya9dhhGCf74JTOB2uyksEHhIGw7w9tNZRUJF73lEq2h4H5JT6MBa4PdT4G+sx6fZwq+xKZAL/sVNAIuojPn7Dg==",
+          "requires": {
+            "popper.js": "^1.12.5",
+            "prop-types": "^15.5.10"
+          }
+        },
         "react-redux": {
           "version": "4.4.9",
           "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-4.4.9.tgz",
           "integrity": "sha512-3XS7mjTOcvaP2H5OE/LxEgDHRuEyTZxBRlwvXHzNqYkZdYd7Ra98AimWoDSHP9OcLoydjA1ocgiZxxcqeXj0Sw==",
           "requires": {
-            "create-react-class": "15.6.3",
-            "hoist-non-react-statics": "2.5.5",
-            "invariant": "2.2.4",
-            "lodash": "4.17.10",
-            "loose-envify": "1.3.1",
-            "prop-types": "15.6.2"
+            "create-react-class": "^15.5.1",
+            "hoist-non-react-statics": "^2.5.0",
+            "invariant": "^2.0.0",
+            "lodash": "^4.2.0",
+            "loose-envify": "^1.1.0",
+            "prop-types": "^15.5.4"
+          }
+        },
+        "react-router": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/react-router/-/react-router-1.0.3.tgz",
+          "integrity": "sha1-mA7KoFW4bkfIZUjCMq4FqIpB8Lc=",
+          "requires": {
+            "invariant": "^2.0.0",
+            "warning": "^2.0.0"
+          }
+        },
+        "react-router-dom": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz",
+          "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==",
+          "requires": {
+            "history": "^4.7.2",
+            "invariant": "^2.2.4",
+            "loose-envify": "^1.3.1",
+            "prop-types": "^15.6.1",
+            "react-router": "^4.3.1",
+            "warning": "^4.0.1"
+          },
+          "dependencies": {
+            "history": {
+              "version": "4.9.0",
+              "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz",
+              "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==",
+              "requires": {
+                "@babel/runtime": "^7.1.2",
+                "loose-envify": "^1.2.0",
+                "resolve-pathname": "^2.2.0",
+                "tiny-invariant": "^1.0.2",
+                "tiny-warning": "^1.0.0",
+                "value-equal": "^0.4.0"
+              }
+            },
+            "isarray": {
+              "version": "0.0.1",
+              "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+              "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+            },
+            "path-to-regexp": {
+              "version": "1.7.0",
+              "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+              "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+              "requires": {
+                "isarray": "0.0.1"
+              }
+            },
+            "react-router": {
+              "version": "4.3.1",
+              "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz",
+              "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==",
+              "requires": {
+                "history": "^4.7.2",
+                "hoist-non-react-statics": "^2.5.0",
+                "invariant": "^2.2.4",
+                "loose-envify": "^1.3.1",
+                "path-to-regexp": "^1.7.0",
+                "prop-types": "^15.6.1",
+                "warning": "^4.0.1"
+              }
+            },
+            "warning": {
+              "version": "4.0.3",
+              "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+              "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+              "requires": {
+                "loose-envify": "^1.0.0"
+              }
+            }
           }
         },
         "react-select": {
@@ -24654,8 +24937,42 @@
           "resolved": "https://registry.npmjs.org/react-select/-/react-select-0.9.1.tgz",
           "integrity": "sha1-4yKi0KBjlqSCBrBVPfXsR9Fgg7o=",
           "requires": {
-            "classnames": "2.2.6",
-            "react-input-autosize": "0.6.13"
+            "classnames": "^2.2.0",
+            "react-input-autosize": "^0.6.2"
+          }
+        },
+        "react-switch-button": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/react-switch-button/-/react-switch-button-1.1.2.tgz",
+          "integrity": "sha1-jOhPaUa046k3PnttasjngNl/L08="
+        },
+        "react-textarea-autosize": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-5.2.1.tgz",
+          "integrity": "sha512-bx6z2I35aapr71ggw2yZIA4qhmqeTa4ZVsSaTeFvtf9kfcZppDBh2PbMt8lvbdmzEk7qbSFhAxR9vxEVm6oiMg==",
+          "requires": {
+            "prop-types": "^15.6.0"
+          }
+        },
+        "react-transition-group": {
+          "version": "2.9.0",
+          "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
+          "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
+          "requires": {
+            "dom-helpers": "^3.4.0",
+            "loose-envify": "^1.4.0",
+            "prop-types": "^15.6.2",
+            "react-lifecycles-compat": "^3.0.4"
+          },
+          "dependencies": {
+            "loose-envify": {
+              "version": "1.4.0",
+              "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+              "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+              "requires": {
+                "js-tokens": "^3.0.0 || ^4.0.0"
+              }
+            }
           }
         },
         "react2angular": {
@@ -24663,10 +24980,10 @@
           "resolved": "https://registry.npmjs.org/react2angular/-/react2angular-4.0.4.tgz",
           "integrity": "sha1-UB51p8oZHEr29VglE8RanuA3VgI=",
           "requires": {
-            "@types/lodash.frompairs": "4.0.4",
-            "angular": "1.7.2",
-            "lodash.frompairs": "4.0.1",
-            "ngcomponent": "4.1.0"
+            "@types/lodash.frompairs": "^4.0.3",
+            "angular": ">=1.5",
+            "lodash.frompairs": "^4.0.1",
+            "ngcomponent": "^4.1.0"
           }
         },
         "read-pkg": {
@@ -24674,9 +24991,9 @@
           "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
           "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
           "requires": {
-            "load-json-file": "1.1.0",
-            "normalize-package-data": "2.4.0",
-            "path-type": "1.1.0"
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
           }
         },
         "read-pkg-up": {
@@ -24684,8 +25001,8 @@
           "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
           "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
           "requires": {
-            "find-up": "1.1.2",
-            "read-pkg": "1.1.0"
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
           }
         },
         "readable-stream": {
@@ -24693,13 +25010,13 @@
           "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
           "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "readdirp": {
@@ -24707,10 +25024,10 @@
           "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
           "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
           "requires": {
-            "graceful-fs": "4.1.11",
-            "minimatch": "3.0.4",
-            "readable-stream": "2.3.6",
-            "set-immediate-shim": "1.0.1"
+            "graceful-fs": "^4.1.2",
+            "minimatch": "^3.0.2",
+            "readable-stream": "^2.0.2",
+            "set-immediate-shim": "^1.0.1"
           }
         },
         "readline2": {
@@ -24718,8 +25035,8 @@
           "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
           "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
             "mute-stream": "0.0.5"
           }
         },
@@ -24729,9 +25046,9 @@
           "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
           "requires": {
             "ast-types": "0.9.6",
-            "esprima": "3.1.3",
-            "private": "0.1.8",
-            "source-map": "0.5.7"
+            "esprima": "~3.1.0",
+            "private": "~0.1.5",
+            "source-map": "~0.5.0"
           },
           "dependencies": {
             "esprima": {
@@ -24746,13 +25063,24 @@
             }
           }
         },
+        "recompose": {
+          "version": "0.26.0",
+          "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz",
+          "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==",
+          "requires": {
+            "change-emitter": "^0.1.2",
+            "fbjs": "^0.8.1",
+            "hoist-non-react-statics": "^2.3.1",
+            "symbol-observable": "^1.0.4"
+          }
+        },
         "redent": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
           "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
           "requires": {
-            "indent-string": "2.1.0",
-            "strip-indent": "1.0.1"
+            "indent-string": "^2.1.0",
+            "strip-indent": "^1.0.1"
           }
         },
         "reduce-css-calc": {
@@ -24760,9 +25088,9 @@
           "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
           "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
           "requires": {
-            "balanced-match": "0.4.2",
-            "math-expression-evaluator": "1.2.17",
-            "reduce-function-call": "1.0.2"
+            "balanced-match": "^0.4.2",
+            "math-expression-evaluator": "^1.2.14",
+            "reduce-function-call": "^1.0.1"
           },
           "dependencies": {
             "balanced-match": {
@@ -24777,7 +25105,7 @@
           "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
           "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
           "requires": {
-            "balanced-match": "0.4.2"
+            "balanced-match": "^0.4.2"
           },
           "dependencies": {
             "balanced-match": {
@@ -24792,12 +25120,51 @@
           "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
           "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
           "requires": {
-            "lodash": "4.17.10",
-            "lodash-es": "4.17.10",
-            "loose-envify": "1.3.1",
-            "symbol-observable": "1.2.0"
+            "lodash": "^4.2.1",
+            "lodash-es": "^4.2.1",
+            "loose-envify": "^1.1.0",
+            "symbol-observable": "^1.0.3"
+          }
+        },
+        "redux-form": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-4.2.2.tgz",
+          "integrity": "sha1-uK43pAcJBvRdvTCwcinxoQvyXLA=",
+          "requires": {
+            "deep-equal": "^1.0.1",
+            "hoist-non-react-statics": "^1.0.5",
+            "is-promise": "^2.1.0",
+            "react-lazy-cache": "^3.0.1"
+          },
+          "dependencies": {
+            "hoist-non-react-statics": {
+              "version": "1.2.0",
+              "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz",
+              "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
+            }
+          }
+        },
+        "redux-logger": {
+          "version": "2.10.2",
+          "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-2.10.2.tgz",
+          "integrity": "sha1-PFpfCm8yV3wd6t9mVfJX+CxsOTc=",
+          "requires": {
+            "deep-diff": "0.3.4"
           }
         },
+        "redux-router": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/redux-router/-/redux-router-1.0.0.tgz",
+          "integrity": "sha1-PBZ240Qb7FD+jZJFfAF8tjaZM08=",
+          "requires": {
+            "deep-equal": "^1.0.1"
+          }
+        },
+        "redux-thunk": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
+          "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
+        },
         "regenerate": {
           "version": "1.4.0",
           "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
@@ -24813,9 +25180,9 @@
           "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
           "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
           "requires": {
-            "babel-runtime": "6.26.0",
-            "babel-types": "6.26.0",
-            "private": "0.1.8"
+            "babel-runtime": "^6.18.0",
+            "babel-types": "^6.19.0",
+            "private": "^0.1.6"
           }
         },
         "regex-cache": {
@@ -24823,7 +25190,7 @@
           "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
           "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
           "requires": {
-            "is-equal-shallow": "0.1.3"
+            "is-equal-shallow": "^0.1.3"
           }
         },
         "regexpu-core": {
@@ -24831,9 +25198,9 @@
           "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
           "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
           "requires": {
-            "regenerate": "1.4.0",
-            "regjsgen": "0.2.0",
-            "regjsparser": "0.1.5"
+            "regenerate": "^1.2.1",
+            "regjsgen": "^0.2.0",
+            "regjsparser": "^0.1.4"
           }
         },
         "regjsgen": {
@@ -24846,7 +25213,7 @@
           "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
           "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
           "requires": {
-            "jsesc": "0.5.0"
+            "jsesc": "~0.5.0"
           },
           "dependencies": {
             "jsesc": {
@@ -24871,11 +25238,11 @@
           "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz",
           "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
           "requires": {
-            "css-select": "1.2.0",
-            "dom-converter": "0.1.4",
-            "htmlparser2": "3.3.0",
-            "strip-ansi": "3.0.1",
-            "utila": "0.3.3"
+            "css-select": "^1.1.0",
+            "dom-converter": "~0.1",
+            "htmlparser2": "~3.3.0",
+            "strip-ansi": "^3.0.0",
+            "utila": "~0.3"
           },
           "dependencies": {
             "utila": {
@@ -24900,7 +25267,7 @@
           "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
           "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
           "requires": {
-            "is-finite": "1.0.2"
+            "is-finite": "^1.0.0"
           }
         },
         "request": {
@@ -24908,26 +25275,26 @@
           "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
           "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
           "requires": {
-            "aws-sign2": "0.7.0",
-            "aws4": "1.7.0",
-            "caseless": "0.12.0",
-            "combined-stream": "1.0.6",
-            "extend": "3.0.1",
-            "forever-agent": "0.6.1",
-            "form-data": "2.3.2",
-            "har-validator": "5.0.3",
-            "http-signature": "1.2.0",
-            "is-typedarray": "1.0.0",
-            "isstream": "0.1.2",
-            "json-stringify-safe": "5.0.1",
-            "mime-types": "2.1.18",
-            "oauth-sign": "0.8.2",
-            "performance-now": "2.1.0",
-            "qs": "6.5.2",
-            "safe-buffer": "5.1.2",
-            "tough-cookie": "2.3.4",
-            "tunnel-agent": "0.6.0",
-            "uuid": "3.3.2"
+            "aws-sign2": "~0.7.0",
+            "aws4": "^1.6.0",
+            "caseless": "~0.12.0",
+            "combined-stream": "~1.0.5",
+            "extend": "~3.0.1",
+            "forever-agent": "~0.6.1",
+            "form-data": "~2.3.1",
+            "har-validator": "~5.0.3",
+            "http-signature": "~1.2.0",
+            "is-typedarray": "~1.0.0",
+            "isstream": "~0.1.2",
+            "json-stringify-safe": "~5.0.1",
+            "mime-types": "~2.1.17",
+            "oauth-sign": "~0.8.2",
+            "performance-now": "^2.1.0",
+            "qs": "~6.5.1",
+            "safe-buffer": "^5.1.1",
+            "tough-cookie": "~2.3.3",
+            "tunnel-agent": "^0.6.0",
+            "uuid": "^3.1.0"
           },
           "dependencies": {
             "ajv": {
@@ -24935,10 +25302,10 @@
               "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
               "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
               "requires": {
-                "co": "4.6.0",
-                "fast-deep-equal": "1.1.0",
-                "fast-json-stable-stringify": "2.0.0",
-                "json-schema-traverse": "0.3.1"
+                "co": "^4.6.0",
+                "fast-deep-equal": "^1.0.0",
+                "fast-json-stable-stringify": "^2.0.0",
+                "json-schema-traverse": "^0.3.0"
               }
             },
             "assert-plus": {
@@ -24961,8 +25328,8 @@
               "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
               "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
               "requires": {
-                "ajv": "5.5.2",
-                "har-schema": "2.0.0"
+                "ajv": "^5.1.0",
+                "har-schema": "^2.0.0"
               }
             },
             "http-signature": {
@@ -24970,9 +25337,9 @@
               "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
               "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
               "requires": {
-                "assert-plus": "1.0.0",
-                "jsprim": "1.4.1",
-                "sshpk": "1.14.2"
+                "assert-plus": "^1.0.0",
+                "jsprim": "^1.2.2",
+                "sshpk": "^1.7.0"
               }
             },
             "performance-now": {
@@ -24997,8 +25364,8 @@
           "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
           "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
           "requires": {
-            "caller-path": "0.1.0",
-            "resolve-from": "1.0.1"
+            "caller-path": "^0.1.0",
+            "resolve-from": "^1.0.0"
           }
         },
         "requires-port": {
@@ -25011,7 +25378,7 @@
           "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
           "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
           "requires": {
-            "path-parse": "1.0.5"
+            "path-parse": "^1.0.5"
           }
         },
         "resolve-from": {
@@ -25019,13 +25386,18 @@
           "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
           "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY="
         },
+        "resolve-pathname": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz",
+          "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg=="
+        },
         "restore-cursor": {
           "version": "1.0.1",
           "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
           "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
           "requires": {
-            "exit-hook": "1.1.1",
-            "onetime": "1.1.0"
+            "exit-hook": "^1.0.0",
+            "onetime": "^1.0.0"
           }
         },
         "right-align": {
@@ -25033,7 +25405,7 @@
           "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
           "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
           "requires": {
-            "align-text": "0.1.4"
+            "align-text": "^0.1.1"
           }
         },
         "rimraf": {
@@ -25041,7 +25413,7 @@
           "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
           "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
           "requires": {
-            "glob": "7.1.2"
+            "glob": "^7.0.5"
           },
           "dependencies": {
             "glob": {
@@ -25049,12 +25421,12 @@
               "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
               "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
               "requires": {
-                "fs.realpath": "1.0.0",
-                "inflight": "1.0.6",
-                "inherits": "2.0.3",
-                "minimatch": "3.0.4",
-                "once": "1.4.0",
-                "path-is-absolute": "1.0.1"
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
               }
             }
           }
@@ -25069,7 +25441,7 @@
           "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
           "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
           "requires": {
-            "once": "1.4.0"
+            "once": "^1.3.0"
           }
         },
         "rx-lite": {
@@ -25082,15 +25454,15 @@
           "resolved": "https://registry.npmjs.org/s3/-/s3-4.4.0.tgz",
           "integrity": "sha1-VqT3dVFae2ucjlxrGrUfkDdmnx8=",
           "requires": {
-            "aws-sdk": "2.0.31",
-            "fd-slicer": "1.0.1",
-            "findit2": "2.2.3",
-            "graceful-fs": "3.0.11",
-            "mime": "1.2.11",
-            "mkdirp": "0.5.1",
-            "pend": "1.2.0",
-            "rimraf": "2.2.8",
-            "streamsink": "1.2.0"
+            "aws-sdk": "~2.0.31",
+            "fd-slicer": "~1.0.0",
+            "findit2": "~2.2.3",
+            "graceful-fs": "~3.0.5",
+            "mime": "~1.2.11",
+            "mkdirp": "~0.5.0",
+            "pend": "~1.2.0",
+            "rimraf": "~2.2.8",
+            "streamsink": "~1.2.0"
           },
           "dependencies": {
             "graceful-fs": {
@@ -25098,7 +25470,7 @@
               "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
               "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
               "requires": {
-                "natives": "1.1.4"
+                "natives": "^1.1.0"
               }
             },
             "mime": {
@@ -25133,10 +25505,10 @@
           "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
           "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
           "requires": {
-            "glob": "7.1.2",
-            "lodash": "4.17.10",
-            "scss-tokenizer": "0.2.3",
-            "yargs": "7.1.0"
+            "glob": "^7.0.0",
+            "lodash": "^4.0.0",
+            "scss-tokenizer": "^0.2.3",
+            "yargs": "^7.0.0"
           },
           "dependencies": {
             "camelcase": {
@@ -25149,9 +25521,9 @@
               "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
               "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
               "requires": {
-                "string-width": "1.0.2",
-                "strip-ansi": "3.0.1",
-                "wrap-ansi": "2.1.0"
+                "string-width": "^1.0.1",
+                "strip-ansi": "^3.0.1",
+                "wrap-ansi": "^2.0.0"
               }
             },
             "glob": {
@@ -25159,12 +25531,12 @@
               "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
               "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
               "requires": {
-                "fs.realpath": "1.0.0",
-                "inflight": "1.0.6",
-                "inherits": "2.0.3",
-                "minimatch": "3.0.4",
-                "once": "1.4.0",
-                "path-is-absolute": "1.0.1"
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
               }
             },
             "yargs": {
@@ -25172,19 +25544,19 @@
               "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
               "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
               "requires": {
-                "camelcase": "3.0.0",
-                "cliui": "3.2.0",
-                "decamelize": "1.2.0",
-                "get-caller-file": "1.0.2",
-                "os-locale": "1.4.0",
-                "read-pkg-up": "1.0.1",
-                "require-directory": "2.1.1",
-                "require-main-filename": "1.0.1",
-                "set-blocking": "2.0.0",
-                "string-width": "1.0.2",
-                "which-module": "1.0.0",
-                "y18n": "3.2.1",
-                "yargs-parser": "5.0.0"
+                "camelcase": "^3.0.0",
+                "cliui": "^3.2.0",
+                "decamelize": "^1.1.1",
+                "get-caller-file": "^1.0.1",
+                "os-locale": "^1.4.0",
+                "read-pkg-up": "^1.0.1",
+                "require-directory": "^2.1.1",
+                "require-main-filename": "^1.0.1",
+                "set-blocking": "^2.0.0",
+                "string-width": "^1.0.2",
+                "which-module": "^1.0.0",
+                "y18n": "^3.2.1",
+                "yargs-parser": "^5.0.0"
               }
             }
           }
@@ -25194,9 +25566,9 @@
           "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-3.2.3.tgz",
           "integrity": "sha1-dC6B/YFwqHcal54YYiUBZ0qI41U=",
           "requires": {
-            "async": "1.5.2",
-            "loader-utils": "0.2.17",
-            "object-assign": "4.1.1"
+            "async": "^1.4.0",
+            "loader-utils": "^0.2.5",
+            "object-assign": "^4.0.1"
           },
           "dependencies": {
             "async": {
@@ -25221,8 +25593,8 @@
           "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
           "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
           "requires": {
-            "js-base64": "2.4.5",
-            "source-map": "0.4.4"
+            "js-base64": "^2.1.8",
+            "source-map": "^0.4.2"
           }
         },
         "semver": {
@@ -25236,18 +25608,18 @@
           "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
           "requires": {
             "debug": "2.6.9",
-            "depd": "1.1.2",
-            "destroy": "1.0.4",
-            "encodeurl": "1.0.2",
-            "escape-html": "1.0.3",
-            "etag": "1.8.1",
+            "depd": "~1.1.2",
+            "destroy": "~1.0.4",
+            "encodeurl": "~1.0.2",
+            "escape-html": "~1.0.3",
+            "etag": "~1.8.1",
             "fresh": "0.5.2",
-            "http-errors": "1.6.3",
+            "http-errors": "~1.6.2",
             "mime": "1.4.1",
             "ms": "2.0.0",
-            "on-finished": "2.3.0",
-            "range-parser": "1.2.0",
-            "statuses": "1.4.0"
+            "on-finished": "~2.3.0",
+            "range-parser": "~1.2.0",
+            "statuses": "~1.4.0"
           },
           "dependencies": {
             "debug": {
@@ -25265,18 +25637,26 @@
             }
           }
         },
+        "sentence-case": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz",
+          "integrity": "sha1-gDSq/CFFdy06vhUJqkLJ4QQtwTk=",
+          "requires": {
+            "lower-case": "^1.1.1"
+          }
+        },
         "serve-index": {
           "version": "1.9.1",
           "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
           "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
           "requires": {
-            "accepts": "1.3.5",
+            "accepts": "~1.3.4",
             "batch": "0.6.1",
             "debug": "2.6.9",
-            "escape-html": "1.0.3",
-            "http-errors": "1.6.3",
-            "mime-types": "2.1.18",
-            "parseurl": "1.3.2"
+            "escape-html": "~1.0.3",
+            "http-errors": "~1.6.2",
+            "mime-types": "~2.1.17",
+            "parseurl": "~1.3.2"
           },
           "dependencies": {
             "debug": {
@@ -25294,9 +25674,9 @@
           "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
           "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
           "requires": {
-            "encodeurl": "1.0.2",
-            "escape-html": "1.0.3",
-            "parseurl": "1.3.2",
+            "encodeurl": "~1.0.2",
+            "escape-html": "~1.0.3",
+            "parseurl": "~1.3.2",
             "send": "0.16.2"
           }
         },
@@ -25345,6 +25725,11 @@
           "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
           "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
         },
+        "simple-assign": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/simple-assign/-/simple-assign-0.1.0.tgz",
+          "integrity": "sha1-F/0wZqXz13OPUDIbsPFMooHMS6o="
+        },
         "sinon": {
           "version": "2.0.0-pre",
           "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.0.0-pre.tgz",
@@ -25354,7 +25739,7 @@
             "lolex": "1.3.2",
             "samsam": "1.1.2",
             "text-encoding": "0.5.2",
-            "util": "0.11.0"
+            "util": ">=0.10.3 <1"
           }
         },
         "slash": {
@@ -25367,12 +25752,20 @@
           "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
           "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU="
         },
+        "snake-case": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz",
+          "integrity": "sha1-DC8l4wUVjZoY09l3BmGH/vilpmo=",
+          "requires": {
+            "sentence-case": "^1.1.2"
+          }
+        },
         "sntp": {
           "version": "1.0.9",
           "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
           "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
           "requires": {
-            "hoek": "2.16.3"
+            "hoek": "2.x.x"
           }
         },
         "sockjs": {
@@ -25380,8 +25773,8 @@
           "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
           "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
           "requires": {
-            "faye-websocket": "0.10.0",
-            "uuid": "3.3.2"
+            "faye-websocket": "^0.10.0",
+            "uuid": "^3.0.1"
           }
         },
         "sockjs-client": {
@@ -25389,12 +25782,12 @@
           "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz",
           "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=",
           "requires": {
-            "debug": "2.6.9",
+            "debug": "^2.6.6",
             "eventsource": "0.1.6",
-            "faye-websocket": "0.11.1",
-            "inherits": "2.0.3",
-            "json3": "3.3.2",
-            "url-parse": "1.4.1"
+            "faye-websocket": "~0.11.0",
+            "inherits": "^2.0.1",
+            "json3": "^3.3.2",
+            "url-parse": "^1.1.8"
           },
           "dependencies": {
             "debug": {
@@ -25410,7 +25803,7 @@
               "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
               "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
               "requires": {
-                "websocket-driver": "0.7.0"
+                "websocket-driver": ">=0.5.1"
               }
             }
           }
@@ -25420,7 +25813,7 @@
           "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
           "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
           "requires": {
-            "is-plain-obj": "1.1.0"
+            "is-plain-obj": "^1.0.0"
           }
         },
         "source-list-map": {
@@ -25433,7 +25826,7 @@
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
           "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
           "requires": {
-            "amdefine": "1.0.1"
+            "amdefine": ">=0.0.4"
           }
         },
         "source-map-support": {
@@ -25441,7 +25834,7 @@
           "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
           "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
           "requires": {
-            "source-map": "0.5.7"
+            "source-map": "^0.5.6"
           },
           "dependencies": {
             "source-map": {
@@ -25451,13 +25844,18 @@
             }
           }
         },
+        "spark-md5": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
+          "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8="
+        },
         "spdx-correct": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
           "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
           "requires": {
-            "spdx-expression-parse": "3.0.0",
-            "spdx-license-ids": "3.0.0"
+            "spdx-expression-parse": "^3.0.0",
+            "spdx-license-ids": "^3.0.0"
           }
         },
         "spdx-exceptions": {
@@ -25470,8 +25868,8 @@
           "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
           "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
           "requires": {
-            "spdx-exceptions": "2.1.0",
-            "spdx-license-ids": "3.0.0"
+            "spdx-exceptions": "^2.1.0",
+            "spdx-license-ids": "^3.0.0"
           }
         },
         "spdx-license-ids": {
@@ -25489,15 +25887,15 @@
           "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
           "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
           "requires": {
-            "asn1": "0.2.3",
-            "assert-plus": "1.0.0",
-            "bcrypt-pbkdf": "1.0.2",
-            "dashdash": "1.14.1",
-            "ecc-jsbn": "0.1.1",
-            "getpass": "0.1.7",
-            "jsbn": "0.1.1",
-            "safer-buffer": "2.1.2",
-            "tweetnacl": "0.14.5"
+            "asn1": "~0.2.3",
+            "assert-plus": "^1.0.0",
+            "bcrypt-pbkdf": "^1.0.0",
+            "dashdash": "^1.12.0",
+            "ecc-jsbn": "~0.1.1",
+            "getpass": "^0.1.1",
+            "jsbn": "~0.1.0",
+            "safer-buffer": "^2.0.2",
+            "tweetnacl": "~0.14.0"
           },
           "dependencies": {
             "assert-plus": {
@@ -25512,7 +25910,7 @@
           "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-0.2.4.tgz",
           "integrity": "sha1-t9NNg4k3uWn5ZBygfUj47eJj6ns=",
           "requires": {
-            "escodegen": "0.0.28"
+            "escodegen": "~0.0.24"
           },
           "dependencies": {
             "escodegen": {
@@ -25520,9 +25918,9 @@
               "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz",
               "integrity": "sha1-Dk/xcV8yh3XWyrUaxEpAbNer/9M=",
               "requires": {
-                "esprima": "1.0.4",
-                "estraverse": "1.3.2",
-                "source-map": "0.4.4"
+                "esprima": "~1.0.2",
+                "estraverse": "~1.3.0",
+                "source-map": ">= 0.1.2"
               }
             },
             "esprima": {
@@ -25542,17 +25940,17 @@
           "resolved": "https://registry.npmjs.org/static-module/-/static-module-1.5.0.tgz",
           "integrity": "sha1-J9qYg8QajNCSNvhC8MHrxu32PYY=",
           "requires": {
-            "concat-stream": "1.6.2",
-            "duplexer2": "0.0.2",
-            "escodegen": "1.3.3",
-            "falafel": "2.1.0",
-            "has": "1.0.3",
-            "object-inspect": "0.4.0",
-            "quote-stream": "0.0.0",
-            "readable-stream": "1.0.34",
-            "shallow-copy": "0.0.1",
-            "static-eval": "0.2.4",
-            "through2": "0.4.2"
+            "concat-stream": "~1.6.0",
+            "duplexer2": "~0.0.2",
+            "escodegen": "~1.3.2",
+            "falafel": "^2.1.0",
+            "has": "^1.0.0",
+            "object-inspect": "~0.4.0",
+            "quote-stream": "~0.0.0",
+            "readable-stream": "~1.0.27-1",
+            "shallow-copy": "~0.0.1",
+            "static-eval": "~0.2.0",
+            "through2": "~0.4.1"
           },
           "dependencies": {
             "isarray": {
@@ -25565,10 +25963,10 @@
               "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
               "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
               "requires": {
-                "core-util-is": "1.0.2",
-                "inherits": "2.0.3",
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.1",
                 "isarray": "0.0.1",
-                "string_decoder": "0.10.31"
+                "string_decoder": "~0.10.x"
               }
             },
             "string_decoder": {
@@ -25588,8 +25986,8 @@
           "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
           "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
           "requires": {
-            "inherits": "2.0.3",
-            "readable-stream": "2.3.6"
+            "inherits": "~2.0.1",
+            "readable-stream": "^2.0.2"
           }
         },
         "stream-cache": {
@@ -25597,16 +25995,21 @@
           "resolved": "https://registry.npmjs.org/stream-cache/-/stream-cache-0.0.2.tgz",
           "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8="
         },
+        "stream-consume": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+          "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg=="
+        },
         "stream-http": {
           "version": "2.8.3",
           "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
           "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
           "requires": {
-            "builtin-status-codes": "3.0.0",
-            "inherits": "2.0.3",
-            "readable-stream": "2.3.6",
-            "to-arraybuffer": "1.0.1",
-            "xtend": "4.0.1"
+            "builtin-status-codes": "^3.0.0",
+            "inherits": "^2.0.1",
+            "readable-stream": "^2.3.6",
+            "to-arraybuffer": "^1.0.0",
+            "xtend": "^4.0.0"
           },
           "dependencies": {
             "xtend": {
@@ -25631,9 +26034,9 @@
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         },
         "string_decoder": {
@@ -25641,7 +26044,7 @@
           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         },
         "stringstream": {
@@ -25654,7 +26057,7 @@
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
           "requires": {
-            "ansi-regex": "2.1.1"
+            "ansi-regex": "^2.0.0"
           }
         },
         "strip-bom": {
@@ -25662,7 +26065,7 @@
           "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
           "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
           "requires": {
-            "is-utf8": "0.2.1"
+            "is-utf8": "^0.2.0"
           }
         },
         "strip-indent": {
@@ -25670,7 +26073,7 @@
           "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
           "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
           "requires": {
-            "get-stdin": "4.0.1"
+            "get-stdin": "^4.0.1"
           }
         },
         "strip-json-comments": {
@@ -25683,7 +26086,7 @@
           "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz",
           "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=",
           "requires": {
-            "loader-utils": "1.1.0"
+            "loader-utils": "^1.0.2"
           },
           "dependencies": {
             "loader-utils": {
@@ -25691,9 +26094,9 @@
               "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
               "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
               "requires": {
-                "big.js": "3.2.0",
-                "emojis-list": "2.1.0",
-                "json5": "0.5.1"
+                "big.js": "^3.1.3",
+                "emojis-list": "^2.0.0",
+                "json5": "^0.5.0"
               }
             }
           }
@@ -25703,16 +26106,16 @@
           "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz",
           "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==",
           "requires": {
-            "component-emitter": "1.2.1",
-            "cookiejar": "2.1.2",
-            "debug": "3.1.0",
-            "extend": "3.0.1",
-            "form-data": "2.3.2",
-            "formidable": "1.2.1",
-            "methods": "1.1.2",
-            "mime": "1.6.0",
-            "qs": "6.5.2",
-            "readable-stream": "2.3.6"
+            "component-emitter": "^1.2.0",
+            "cookiejar": "^2.1.0",
+            "debug": "^3.1.0",
+            "extend": "^3.0.0",
+            "form-data": "^2.3.1",
+            "formidable": "^1.2.0",
+            "methods": "^1.1.1",
+            "mime": "^1.4.1",
+            "qs": "^6.5.1",
+            "readable-stream": "^2.3.5"
           }
         },
         "supports-color": {
@@ -25725,13 +26128,22 @@
           "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
           "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
           "requires": {
-            "coa": "1.0.4",
-            "colors": "1.1.2",
-            "csso": "2.3.2",
-            "js-yaml": "3.7.0",
-            "mkdirp": "0.5.1",
-            "sax": "1.2.4",
-            "whet.extend": "0.9.9"
+            "coa": "~1.0.1",
+            "colors": "~1.1.2",
+            "csso": "~2.3.1",
+            "js-yaml": "~3.7.0",
+            "mkdirp": "~0.5.1",
+            "sax": "~1.2.1",
+            "whet.extend": "~0.9.9"
+          }
+        },
+        "swap-case": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz",
+          "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=",
+          "requires": {
+            "lower-case": "^1.1.1",
+            "upper-case": "^1.1.1"
           }
         },
         "symbol-observable": {
@@ -25744,12 +26156,12 @@
           "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
           "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
           "requires": {
-            "ajv": "4.11.8",
-            "ajv-keywords": "1.5.1",
-            "chalk": "1.1.3",
-            "lodash": "4.17.10",
+            "ajv": "^4.7.0",
+            "ajv-keywords": "^1.0.0",
+            "chalk": "^1.1.1",
+            "lodash": "^4.0.0",
             "slice-ansi": "0.0.4",
-            "string-width": "2.1.1"
+            "string-width": "^2.0.0"
           },
           "dependencies": {
             "ansi-regex": {
@@ -25767,8 +26179,8 @@
               "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
               "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
               "requires": {
-                "is-fullwidth-code-point": "2.0.0",
-                "strip-ansi": "4.0.0"
+                "is-fullwidth-code-point": "^2.0.0",
+                "strip-ansi": "^4.0.0"
               }
             },
             "strip-ansi": {
@@ -25776,7 +26188,7 @@
               "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
               "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
               "requires": {
-                "ansi-regex": "3.0.0"
+                "ansi-regex": "^3.0.0"
               }
             }
           }
@@ -25791,9 +26203,127 @@
           "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
           "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
           "requires": {
-            "block-stream": "0.0.9",
-            "fstream": "1.0.11",
-            "inherits": "2.0.3"
+            "block-stream": "*",
+            "fstream": "^1.0.2",
+            "inherits": "2"
+          }
+        },
+        "tc-ui": {
+          "version": "git+https://github.com/appirio-tech/tc-ui.git#e577a0e704136f1e9ecce92ce4c0626aab932691",
+          "from": "git+https://github.com/appirio-tech/tc-ui.git#feature/connectv2",
+          "requires": {
+            "classnames": "^2.2.3",
+            "lodash": "^4.0.0",
+            "moment": "^2.11.2",
+            "node-neat": "~1.7.1-beta1",
+            "react": "^0.14.7",
+            "react-datetime": "^2.0.2",
+            "react-dom": "^0.14.7",
+            "react-dropzone": "^3.3.2",
+            "react-redux": "^4.2.1",
+            "react-router": "^2.0.0-rc6",
+            "react-select": "^0.9.1",
+            "redux": "^3.3.1"
+          },
+          "dependencies": {
+            "fbjs": {
+              "version": "0.6.1",
+              "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz",
+              "integrity": "sha1-lja3cF9bqWhNRLcveDISVK/IYPc=",
+              "requires": {
+                "core-js": "^1.0.0",
+                "loose-envify": "^1.0.0",
+                "promise": "^7.0.3",
+                "ua-parser-js": "^0.7.9",
+                "whatwg-fetch": "^0.9.0"
+              }
+            },
+            "history": {
+              "version": "2.1.2",
+              "resolved": "https://registry.npmjs.org/history/-/history-2.1.2.tgz",
+              "integrity": "sha1-SqLeiXoOSGfkU5hDvm7Nsphr/ew=",
+              "requires": {
+                "deep-equal": "^1.0.0",
+                "invariant": "^2.0.0",
+                "query-string": "^3.0.0",
+                "warning": "^2.0.0"
+              },
+              "dependencies": {
+                "warning": {
+                  "version": "2.1.0",
+                  "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz",
+                  "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=",
+                  "requires": {
+                    "loose-envify": "^1.0.0"
+                  }
+                }
+              }
+            },
+            "hoist-non-react-statics": {
+              "version": "1.2.0",
+              "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz",
+              "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
+            },
+            "moment": {
+              "version": "2.24.0",
+              "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+              "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+            },
+            "query-string": {
+              "version": "3.0.3",
+              "resolved": "https://registry.npmjs.org/query-string/-/query-string-3.0.3.tgz",
+              "integrity": "sha1-ri4UtNBQcdTpuetIc8NbDc1C5jg=",
+              "requires": {
+                "strict-uri-encode": "^1.0.0"
+              }
+            },
+            "react": {
+              "version": "0.14.9",
+              "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz",
+              "integrity": "sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE=",
+              "requires": {
+                "envify": "^3.0.0",
+                "fbjs": "^0.6.1"
+              }
+            },
+            "react-dom": {
+              "version": "0.14.9",
+              "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.9.tgz",
+              "integrity": "sha1-BQZKPc8PsYgKOyv8nVjFXY2fYpM="
+            },
+            "react-router": {
+              "version": "2.8.1",
+              "resolved": "https://registry.npmjs.org/react-router/-/react-router-2.8.1.tgz",
+              "integrity": "sha1-c+lJH2zrMW0Pd5gpCBhj43juTtc=",
+              "requires": {
+                "history": "^2.1.2",
+                "hoist-non-react-statics": "^1.2.0",
+                "invariant": "^2.2.1",
+                "loose-envify": "^1.2.0",
+                "warning": "^3.0.0"
+              }
+            },
+            "warning": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+              "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+              "requires": {
+                "loose-envify": "^1.0.0"
+              }
+            }
+          }
+        },
+        "tcomb": {
+          "version": "3.2.29",
+          "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz",
+          "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ=="
+        },
+        "tcomb-validation": {
+          "version": "3.4.1",
+          "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz",
+          "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==",
+          "requires": {
+            "tcomb": "^3.0.0"
           }
         },
         "text-encoding": {
@@ -25816,8 +26346,8 @@
           "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
           "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
           "requires": {
-            "readable-stream": "1.0.34",
-            "xtend": "2.1.2"
+            "readable-stream": "~1.0.17",
+            "xtend": "~2.1.1"
           },
           "dependencies": {
             "isarray": {
@@ -25830,10 +26360,10 @@
               "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
               "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
               "requires": {
-                "core-util-is": "1.0.2",
-                "inherits": "2.0.3",
+                "core-util-is": "~1.0.0",
+                "inherits": "~2.0.1",
                 "isarray": "0.0.1",
-                "string_decoder": "0.10.31"
+                "string_decoder": "~0.10.x"
               }
             },
             "string_decoder": {
@@ -25853,7 +26383,26 @@
           "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
           "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
           "requires": {
-            "setimmediate": "1.0.5"
+            "setimmediate": "^1.0.4"
+          }
+        },
+        "tiny-invariant": {
+          "version": "1.0.6",
+          "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz",
+          "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA=="
+        },
+        "tiny-warning": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+          "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+        },
+        "title-case": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz",
+          "integrity": "sha1-+uSmrlRr+iLQg6DuqRCkDRLtT1o=",
+          "requires": {
+            "sentence-case": "^1.1.1",
+            "upper-case": "^1.0.3"
           }
         },
         "to-arraybuffer": {
@@ -25876,7 +26425,7 @@
           "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
           "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
           "requires": {
-            "punycode": "1.4.1"
+            "punycode": "^1.4.1"
           }
         },
         "transform-loader": {
@@ -25884,7 +26433,7 @@
           "resolved": "https://registry.npmjs.org/transform-loader/-/transform-loader-0.2.4.tgz",
           "integrity": "sha1-5ch4d7qW1R0/IlNoWHtG4ibRzsk=",
           "requires": {
-            "loader-utils": "1.1.0"
+            "loader-utils": "^1.0.2"
           },
           "dependencies": {
             "loader-utils": {
@@ -25892,9 +26441,9 @@
               "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
               "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
               "requires": {
-                "big.js": "3.2.0",
-                "emojis-list": "2.1.0",
-                "json5": "0.5.1"
+                "big.js": "^3.1.3",
+                "emojis-list": "^2.0.0",
+                "json5": "^0.5.0"
               }
             }
           }
@@ -25904,9 +26453,9 @@
           "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz",
           "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=",
           "requires": {
-            "css": "1.0.8",
-            "promise": "2.0.0",
-            "uglify-js": "2.2.5"
+            "css": "~1.0.8",
+            "promise": "~2.0",
+            "uglify-js": "~2.2.5"
           },
           "dependencies": {
             "is-promise": {
@@ -25919,7 +26468,7 @@
               "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz",
               "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=",
               "requires": {
-                "is-promise": "1.0.1"
+                "is-promise": "~1"
               }
             },
             "source-map": {
@@ -25927,7 +26476,7 @@
               "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
               "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
               "requires": {
-                "amdefine": "1.0.1"
+                "amdefine": ">=0.0.4"
               }
             },
             "uglify-js": {
@@ -25935,8 +26484,8 @@
               "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz",
               "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=",
               "requires": {
-                "optimist": "0.3.7",
-                "source-map": "0.1.43"
+                "optimist": "~0.3.5",
+                "source-map": "~0.1.7"
               }
             }
           }
@@ -25951,6 +26500,11 @@
           "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
           "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
         },
+        "tslib": {
+          "version": "1.10.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+          "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
+        },
         "tty-browserify": {
           "version": "0.0.0",
           "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
@@ -25961,7 +26515,7 @@
           "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
           "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "^5.0.1"
           }
         },
         "tweetnacl": {
@@ -25975,7 +26529,7 @@
           "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
           "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
           "requires": {
-            "prelude-ls": "1.1.2"
+            "prelude-ls": "~1.1.2"
           }
         },
         "type-is": {
@@ -25984,7 +26538,7 @@
           "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
           "requires": {
             "media-typer": "0.3.0",
-            "mime-types": "2.1.18"
+            "mime-types": "~2.1.18"
           }
         },
         "typedarray": {
@@ -26002,8 +26556,8 @@
           "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.2.tgz",
           "integrity": "sha512-/kVQDzwiE9Vy7Y63eMkMozF4jIt0C2+xHctF9YpqNWdE/NLOuMurshkpoYGUlAbeYhACPv0HJPIHJul0Ak4/uw==",
           "requires": {
-            "commander": "2.15.1",
-            "source-map": "0.6.1"
+            "commander": "~2.15.0",
+            "source-map": "~0.6.1"
           },
           "dependencies": {
             "commander": {
@@ -26023,6 +26577,14 @@
           "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
           "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
         },
+        "uncontrollable": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-4.1.0.tgz",
+          "integrity": "sha1-4DWCkSUuGGUiLZCTmxny9J+Bwak=",
+          "requires": {
+            "invariant": "^2.1.0"
+          }
+        },
         "underscore": {
           "version": "1.6.0",
           "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
@@ -26048,6 +26610,29 @@
           "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
           "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
         },
+        "upper-case-first": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz",
+          "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=",
+          "requires": {
+            "upper-case": "^1.1.1"
+          }
+        },
+        "uri-js": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+          "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+          "requires": {
+            "punycode": "^2.1.0"
+          },
+          "dependencies": {
+            "punycode": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+              "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+            }
+          }
+        },
         "url": {
           "version": "0.11.0",
           "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -26074,8 +26659,8 @@
           "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.1.tgz",
           "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==",
           "requires": {
-            "querystringify": "2.0.0",
-            "requires-port": "1.0.0"
+            "querystringify": "^2.0.0",
+            "requires-port": "^1.0.0"
           }
         },
         "user-home": {
@@ -26083,7 +26668,7 @@
           "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
           "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
           "requires": {
-            "os-homedir": "1.0.2"
+            "os-homedir": "^1.0.0"
           }
         },
         "util": {
@@ -26119,10 +26704,15 @@
           "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
           "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
           "requires": {
-            "spdx-correct": "3.0.0",
-            "spdx-expression-parse": "3.0.0"
+            "spdx-correct": "^3.0.0",
+            "spdx-expression-parse": "^3.0.0"
           }
         },
+        "value-equal": {
+          "version": "0.4.0",
+          "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz",
+          "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw=="
+        },
         "vary": {
           "version": "1.1.2",
           "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -26138,9 +26728,9 @@
           "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
           "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
           "requires": {
-            "assert-plus": "1.0.0",
+            "assert-plus": "^1.0.0",
             "core-util-is": "1.0.2",
-            "extsprintf": "1.3.0"
+            "extsprintf": "^1.2.0"
           },
           "dependencies": {
             "assert-plus": {
@@ -26163,14 +26753,22 @@
           "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
           "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
         },
+        "warning": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz",
+          "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=",
+          "requires": {
+            "loose-envify": "^1.0.0"
+          }
+        },
         "watchpack": {
           "version": "0.2.9",
           "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz",
           "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=",
           "requires": {
-            "async": "0.9.2",
-            "chokidar": "1.7.0",
-            "graceful-fs": "4.1.11"
+            "async": "^0.9.0",
+            "chokidar": "^1.0.0",
+            "graceful-fs": "^4.1.2"
           },
           "dependencies": {
             "async": {
@@ -26185,21 +26783,21 @@
           "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz",
           "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=",
           "requires": {
-            "acorn": "3.3.0",
-            "async": "1.5.2",
-            "clone": "1.0.4",
-            "enhanced-resolve": "0.9.1",
-            "interpret": "0.6.6",
-            "loader-utils": "0.2.17",
-            "memory-fs": "0.3.0",
-            "mkdirp": "0.5.1",
-            "node-libs-browser": "0.7.0",
-            "optimist": "0.6.1",
-            "supports-color": "3.2.3",
-            "tapable": "0.1.10",
-            "uglify-js": "2.7.5",
-            "watchpack": "0.2.9",
-            "webpack-core": "0.6.9"
+            "acorn": "^3.0.0",
+            "async": "^1.3.0",
+            "clone": "^1.0.2",
+            "enhanced-resolve": "~0.9.0",
+            "interpret": "^0.6.4",
+            "loader-utils": "^0.2.11",
+            "memory-fs": "~0.3.0",
+            "mkdirp": "~0.5.0",
+            "node-libs-browser": "^0.7.0",
+            "optimist": "~0.6.0",
+            "supports-color": "^3.1.0",
+            "tapable": "~0.1.8",
+            "uglify-js": "~2.7.3",
+            "watchpack": "^0.2.1",
+            "webpack-core": "~0.6.9"
           },
           "dependencies": {
             "acorn": {
@@ -26217,8 +26815,8 @@
               "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
               "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
               "requires": {
-                "minimist": "0.0.8",
-                "wordwrap": "0.0.3"
+                "minimist": "~0.0.1",
+                "wordwrap": "~0.0.2"
               }
             },
             "source-map": {
@@ -26231,7 +26829,7 @@
               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
               "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
               "requires": {
-                "has-flag": "1.0.0"
+                "has-flag": "^1.0.0"
               }
             },
             "uglify-js": {
@@ -26239,10 +26837,10 @@
               "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz",
               "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=",
               "requires": {
-                "async": "0.2.10",
-                "source-map": "0.5.7",
-                "uglify-to-browserify": "1.0.2",
-                "yargs": "3.10.0"
+                "async": "~0.2.6",
+                "source-map": "~0.5.1",
+                "uglify-to-browserify": "~1.0.0",
+                "yargs": "~3.10.0"
               },
               "dependencies": {
                 "async": {
@@ -26259,8 +26857,8 @@
           "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz",
           "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=",
           "requires": {
-            "source-list-map": "0.1.8",
-            "source-map": "0.4.4"
+            "source-list-map": "~0.1.7",
+            "source-map": "~0.4.1"
           }
         },
         "webpack-dev-middleware": {
@@ -26268,11 +26866,11 @@
           "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz",
           "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==",
           "requires": {
-            "memory-fs": "0.4.1",
-            "mime": "1.6.0",
-            "path-is-absolute": "1.0.1",
-            "range-parser": "1.2.0",
-            "time-stamp": "2.0.0"
+            "memory-fs": "~0.4.1",
+            "mime": "^1.5.0",
+            "path-is-absolute": "^1.0.0",
+            "range-parser": "^1.0.3",
+            "time-stamp": "^2.0.0"
           },
           "dependencies": {
             "memory-fs": {
@@ -26280,8 +26878,8 @@
               "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
               "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
               "requires": {
-                "errno": "0.1.7",
-                "readable-stream": "2.3.6"
+                "errno": "^0.1.3",
+                "readable-stream": "^2.0.1"
               }
             }
           }
@@ -26291,19 +26889,19 @@
           "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-1.16.5.tgz",
           "integrity": "sha1-DL1fLSrI1OWTqs1clwLnu9XlmJI=",
           "requires": {
-            "compression": "1.7.2",
-            "connect-history-api-fallback": "1.5.0",
-            "express": "4.16.3",
-            "http-proxy-middleware": "0.17.4",
+            "compression": "^1.5.2",
+            "connect-history-api-fallback": "^1.3.0",
+            "express": "^4.13.3",
+            "http-proxy-middleware": "~0.17.1",
             "open": "0.0.5",
-            "optimist": "0.6.1",
-            "serve-index": "1.9.1",
-            "sockjs": "0.3.19",
-            "sockjs-client": "1.1.5",
-            "stream-cache": "0.0.2",
-            "strip-ansi": "3.0.1",
-            "supports-color": "3.2.3",
-            "webpack-dev-middleware": "1.12.2"
+            "optimist": "~0.6.1",
+            "serve-index": "^1.7.2",
+            "sockjs": "^0.3.15",
+            "sockjs-client": "^1.0.3",
+            "stream-cache": "~0.0.1",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^3.1.1",
+            "webpack-dev-middleware": "^1.10.2"
           },
           "dependencies": {
             "optimist": {
@@ -26311,8 +26909,8 @@
               "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
               "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
               "requires": {
-                "minimist": "0.0.8",
-                "wordwrap": "0.0.3"
+                "minimist": "~0.0.1",
+                "wordwrap": "~0.0.2"
               }
             },
             "supports-color": {
@@ -26320,7 +26918,7 @@
               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
               "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
               "requires": {
-                "has-flag": "1.0.0"
+                "has-flag": "^1.0.0"
               }
             }
           }
@@ -26330,11 +26928,11 @@
           "resolved": "https://registry.npmjs.org/webpack-s3-plugin/-/webpack-s3-plugin-0.6.7.tgz",
           "integrity": "sha1-ABLVqFLwPYmz0gj8I3dA6K0iAyA=",
           "requires": {
-            "aws-sdk": "2.0.31",
-            "cdnizer": "1.1.6",
-            "lodash": "4.17.10",
-            "progress": "1.1.8",
-            "s3": "4.4.0"
+            "aws-sdk": "~2.0.31",
+            "cdnizer": "^1.1.5",
+            "lodash": "^4.5.0",
+            "progress": "^1.1.8",
+            "s3": "^4.4.0"
           }
         },
         "websocket-driver": {
@@ -26342,8 +26940,8 @@
           "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
           "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
           "requires": {
-            "http-parser-js": "0.4.13",
-            "websocket-extensions": "0.1.3"
+            "http-parser-js": ">=0.4.0",
+            "websocket-extensions": ">=0.1.1"
           }
         },
         "websocket-extensions": {
@@ -26366,7 +26964,7 @@
           "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
           "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
           "requires": {
-            "isexe": "2.0.0"
+            "isexe": "^2.0.0"
           }
         },
         "which-module": {
@@ -26379,7 +26977,7 @@
           "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
           "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
           "requires": {
-            "string-width": "1.0.2"
+            "string-width": "^1.0.2 || 2"
           }
         },
         "winchan": {
@@ -26397,8 +26995,8 @@
           "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz",
           "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=",
           "requires": {
-            "acorn": "1.2.2",
-            "acorn-globals": "1.0.9"
+            "acorn": "^1.0.1",
+            "acorn-globals": "^1.0.3"
           },
           "dependencies": {
             "acorn": {
@@ -26418,8 +27016,8 @@
           "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
           "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
           "requires": {
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1"
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1"
           }
         },
         "wrappy": {
@@ -26432,9 +27030,14 @@
           "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
           "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
           "requires": {
-            "mkdirp": "0.5.1"
+            "mkdirp": "^0.5.1"
           }
         },
+        "xml-char-classes": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+          "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0="
+        },
         "xml2js": {
           "version": "0.2.6",
           "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.6.tgz",
@@ -26460,7 +27063,7 @@
           "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
           "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
           "requires": {
-            "object-keys": "0.4.0"
+            "object-keys": "~0.4.0"
           },
           "dependencies": {
             "object-keys": {
@@ -26485,9 +27088,9 @@
           "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
           "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
           "requires": {
-            "camelcase": "1.2.1",
-            "cliui": "2.1.0",
-            "decamelize": "1.2.0",
+            "camelcase": "^1.0.2",
+            "cliui": "^2.1.0",
+            "decamelize": "^1.0.0",
             "window-size": "0.1.0"
           }
         },
@@ -26496,7 +27099,7 @@
           "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
           "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
           "requires": {
-            "camelcase": "3.0.0"
+            "camelcase": "^3.0.0"
           },
           "dependencies": {
             "camelcase": {
@@ -26513,136 +27116,6 @@
         }
       }
     },
-    "tc-ui": {
-      "version": "git+https://github.com/appirio-tech/tc-ui.git#e577a0e704136f1e9ecce92ce4c0626aab932691",
-      "requires": {
-        "classnames": "2.2.6",
-        "lodash": "4.17.11",
-        "moment": "2.22.2",
-        "node-neat": "1.7.2",
-        "react": "0.14.9",
-        "react-datetime": "2.16.3",
-        "react-dom": "0.14.9",
-        "react-dropzone": "3.13.4",
-        "react-redux": "4.4.10",
-        "react-router": "2.8.1",
-        "react-select": "0.9.1",
-        "redux": "3.7.2"
-      },
-      "dependencies": {
-        "history": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/history/-/history-2.1.2.tgz",
-          "integrity": "sha1-SqLeiXoOSGfkU5hDvm7Nsphr/ew=",
-          "requires": {
-            "deep-equal": "1.0.1",
-            "invariant": "2.2.4",
-            "query-string": "3.0.3",
-            "warning": "2.1.0"
-          },
-          "dependencies": {
-            "warning": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz",
-              "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=",
-              "requires": {
-                "loose-envify": "1.4.0"
-              }
-            }
-          }
-        },
-        "hoist-non-react-statics": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
-          "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
-          "requires": {
-            "react-is": "16.8.6"
-          }
-        },
-        "prop-types": {
-          "version": "15.7.2",
-          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
-          "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
-          "requires": {
-            "loose-envify": "1.4.0",
-            "object-assign": "4.1.1",
-            "react-is": "16.8.6"
-          }
-        },
-        "react": {
-          "version": "0.14.9",
-          "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz",
-          "integrity": "sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE=",
-          "requires": {
-            "envify": "3.4.1",
-            "fbjs": "0.6.1"
-          }
-        },
-        "react-dom": {
-          "version": "0.14.9",
-          "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.9.tgz",
-          "integrity": "sha1-BQZKPc8PsYgKOyv8nVjFXY2fYpM="
-        },
-        "react-is": {
-          "version": "16.8.6",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
-          "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
-        },
-        "react-redux": {
-          "version": "4.4.10",
-          "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-4.4.10.tgz",
-          "integrity": "sha512-tjL0Bmpkj75Td0k+lXlF8Fc8a9GuXFv/3ahUOCXExWs/jhsKiQeTffdH0j5byejCGCRL4tvGFYlrwBF1X/Aujg==",
-          "requires": {
-            "create-react-class": "15.6.3",
-            "hoist-non-react-statics": "3.3.0",
-            "invariant": "2.2.4",
-            "lodash": "4.17.11",
-            "loose-envify": "1.4.0",
-            "prop-types": "15.7.2"
-          }
-        },
-        "react-router": {
-          "version": "2.8.1",
-          "resolved": "https://registry.npmjs.org/react-router/-/react-router-2.8.1.tgz",
-          "integrity": "sha1-c+lJH2zrMW0Pd5gpCBhj43juTtc=",
-          "requires": {
-            "history": "2.1.2",
-            "hoist-non-react-statics": "1.2.0",
-            "invariant": "2.2.4",
-            "loose-envify": "1.4.0",
-            "warning": "3.0.0"
-          },
-          "dependencies": {
-            "hoist-non-react-statics": {
-              "version": "1.2.0",
-              "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz",
-              "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
-            }
-          }
-        },
-        "warning": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
-          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
-          "requires": {
-            "loose-envify": "1.4.0"
-          }
-        }
-      }
-    },
-    "tcomb": {
-      "version": "3.2.29",
-      "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz",
-      "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ=="
-    },
-    "tcomb-validation": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz",
-      "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==",
-      "requires": {
-        "tcomb": "3.2.29"
-      }
-    },
     "temp-path": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz",
@@ -26655,11 +27128,11 @@
       "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==",
       "dev": true,
       "requires": {
-        "arrify": "1.0.1",
-        "micromatch": "2.3.11",
-        "object-assign": "4.1.1",
-        "read-pkg-up": "1.0.1",
-        "require-main-filename": "1.0.1"
+        "arrify": "^1.0.1",
+        "micromatch": "^2.3.11",
+        "object-assign": "^4.1.0",
+        "read-pkg-up": "^1.0.1",
+        "require-main-filename": "^1.0.1"
       },
       "dependencies": {
         "find-up": {
@@ -26668,21 +27141,21 @@
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "dev": true,
           "requires": {
-            "path-exists": "2.1.0",
-            "pinkie-promise": "2.0.1"
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "load-json-file": {
           "version": "1.1.0",
-          "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
           "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "parse-json": "2.2.0",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1",
-            "strip-bom": "2.0.0"
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
           }
         },
         "path-exists": {
@@ -26691,7 +27164,7 @@
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
           "dev": true,
           "requires": {
-            "pinkie-promise": "2.0.1"
+            "pinkie-promise": "^2.0.0"
           }
         },
         "path-type": {
@@ -26700,14 +27173,14 @@
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
           "dev": true,
           "requires": {
-            "graceful-fs": "4.1.11",
-            "pify": "2.3.0",
-            "pinkie-promise": "2.0.1"
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
           }
         },
         "pify": {
           "version": "2.3.0",
-          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
           "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
           "dev": true
         },
@@ -26717,9 +27190,9 @@
           "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
           "dev": true,
           "requires": {
-            "load-json-file": "1.1.0",
-            "normalize-package-data": "2.4.0",
-            "path-type": "1.1.0"
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
           }
         },
         "read-pkg-up": {
@@ -26728,8 +27201,8 @@
           "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
           "dev": true,
           "requires": {
-            "find-up": "1.1.2",
-            "read-pkg": "1.1.0"
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
           }
         },
         "strip-bom": {
@@ -26738,7 +27211,7 @@
           "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
           "dev": true,
           "requires": {
-            "is-utf8": "0.2.1"
+            "is-utf8": "^0.2.0"
           }
         }
       }
@@ -26748,15 +27221,10 @@
       "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
       "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
       "requires": {
-        "array-back": "2.0.0",
-        "typical": "2.6.1"
+        "array-back": "^2.0.0",
+        "typical": "^2.6.1"
       }
     },
-    "text-encoding": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.5.2.tgz",
-      "integrity": "sha1-hbRmCBnwiHd2CUZVUWkP6hN9gko="
-    },
     "text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -26771,8 +27239,9 @@
     },
     "through": {
       "version": "2.3.8",
-      "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "dev": true
     },
     "through2": {
       "version": "2.0.3",
@@ -26780,8 +27249,8 @@
       "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
       "dev": true,
       "requires": {
-        "readable-stream": "2.3.6",
-        "xtend": "4.0.1"
+        "readable-stream": "^2.1.5",
+        "xtend": "~4.0.1"
       },
       "dependencies": {
         "process-nextick-args": {
@@ -26792,17 +27261,17 @@
         },
         "readable-stream": {
           "version": "2.3.6",
-          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
           "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
           "dev": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "string_decoder": {
@@ -26811,7 +27280,7 @@
           "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         },
         "xtend": {
@@ -26828,16 +27297,7 @@
       "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
       "dev": true,
       "requires": {
-        "setimmediate": "1.0.5"
-      }
-    },
-    "title-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz",
-      "integrity": "sha1-+uSmrlRr+iLQg6DuqRCkDRLtT1o=",
-      "requires": {
-        "sentence-case": "1.1.3",
-        "upper-case": "1.1.3"
+        "setimmediate": "^1.0.4"
       }
     },
     "tmp": {
@@ -26846,7 +27306,7 @@
       "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
       "dev": true,
       "requires": {
-        "os-tmpdir": "1.0.2"
+        "os-tmpdir": "~1.0.2"
       }
     },
     "tmpl": {
@@ -26866,7 +27326,7 @@
       "resolved": "https://registry.npmjs.org/to-camel-case/-/to-camel-case-1.0.0.tgz",
       "integrity": "sha1-GlYFSy+daWKYzmamCJcyK29CPkY=",
       "requires": {
-        "to-space-case": "1.0.0"
+        "to-space-case": "^1.0.0"
       }
     },
     "to-capital-case": {
@@ -26874,7 +27334,7 @@
       "resolved": "https://registry.npmjs.org/to-capital-case/-/to-capital-case-1.0.0.tgz",
       "integrity": "sha1-pXxQFP1aNyF88FCZ/4pCG7+cm38=",
       "requires": {
-        "to-space-case": "1.0.0"
+        "to-space-case": "^1.0.0"
       }
     },
     "to-fast-properties": {
@@ -26894,7 +27354,7 @@
       "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2"
+        "kind-of": "^3.0.2"
       }
     },
     "to-regex": {
@@ -26903,10 +27363,10 @@
       "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
       "dev": true,
       "requires": {
-        "define-property": "2.0.2",
-        "extend-shallow": "3.0.2",
-        "regex-not": "1.0.2",
-        "safe-regex": "1.1.0"
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
       }
     },
     "to-regex-range": {
@@ -26915,8 +27375,8 @@
       "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
       "dev": true,
       "requires": {
-        "is-number": "3.0.0",
-        "repeat-string": "1.6.1"
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
       },
       "dependencies": {
         "is-number": {
@@ -26925,7 +27385,7 @@
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           }
         }
       }
@@ -26935,7 +27395,7 @@
       "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz",
       "integrity": "sha1-sFLar7Gysp3HcM6gFj5ewOvJ/Bc=",
       "requires": {
-        "to-no-case": "1.0.2"
+        "to-no-case": "^1.0.0"
       }
     },
     "topcoder-react-utils": {
@@ -26943,38 +27403,38 @@
       "resolved": "https://registry.npmjs.org/topcoder-react-utils/-/topcoder-react-utils-0.7.8.tgz",
       "integrity": "sha512-/QW4HMCce2Bc7RZ82d26Wzyit6kyrv2wuLwpzUttWwKbufg85uOx/f188Qu7yzas7Y+D85Rk6PCWiw/V88sRyQ==",
       "requires": {
-        "babel-runtime": "6.26.0",
-        "body-parser": "1.18.3",
-        "command-line-args": "5.0.2",
-        "command-line-usage": "5.0.5",
-        "compression": "1.7.3",
-        "config": "1.31.0",
-        "cookie-parser": "1.4.3",
-        "express": "4.16.4",
-        "helmet": "3.14.0",
-        "lodash": "4.17.11",
-        "moment": "2.22.2",
-        "morgan": "1.9.1",
-        "node-forge": "0.7.6",
-        "prop-types": "15.6.2",
-        "raf": "3.4.0",
-        "react": "16.6.0",
-        "react-css-super-themr": "2.2.0",
-        "react-dom": "16.6.0",
-        "react-helmet": "5.2.0",
-        "react-redux": "5.0.7",
-        "react-router-dom": "4.3.1",
-        "redux": "3.7.2",
-        "redux-actions": "2.6.3",
-        "redux-devtools": "3.4.1",
-        "redux-devtools-dock-monitor": "1.1.3",
-        "redux-devtools-log-monitor": "1.4.0",
-        "redux-promise": "0.6.0",
-        "request-ip": "2.1.1",
-        "serialize-javascript": "1.5.0",
-        "serve-favicon": "2.5.0",
-        "shortid": "2.2.13",
-        "url-parse": "1.4.3"
+        "babel-runtime": "^6.26.0",
+        "body-parser": "^1.18.3",
+        "command-line-args": "^5.0.2",
+        "command-line-usage": "^5.0.5",
+        "compression": "^1.7.2",
+        "config": "^1.30.0",
+        "cookie-parser": "^1.4.3",
+        "express": "^4.16.3",
+        "helmet": "^3.12.1",
+        "lodash": "^4.17.10",
+        "moment": "^2.22.2",
+        "morgan": "^1.9.0",
+        "node-forge": "^0.7.5",
+        "prop-types": "^15.6.2",
+        "raf": "^3.4.0",
+        "react": "^16.4.1",
+        "react-css-super-themr": "^2.2.0",
+        "react-dom": "^16.4.1",
+        "react-helmet": "^5.2.0",
+        "react-redux": "^5.0.7",
+        "react-router-dom": "^4.3.1",
+        "redux": "^3.7.2",
+        "redux-actions": "^2.4.0",
+        "redux-devtools": "^3.4.1",
+        "redux-devtools-dock-monitor": "^1.1.3",
+        "redux-devtools-log-monitor": "^1.4.0",
+        "redux-promise": "^0.6.0",
+        "request-ip": "^2.0.2",
+        "serialize-javascript": "^1.5.0",
+        "serve-favicon": "^2.5.0",
+        "shortid": "^2.2.8",
+        "url-parse": "^1.4.1"
       },
       "dependencies": {
         "babel-runtime": {
@@ -26982,8 +27442,8 @@
           "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
           "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
           "requires": {
-            "core-js": "2.5.7",
-            "regenerator-runtime": "0.11.1"
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.11.0"
           }
         },
         "react-redux": {
@@ -26991,12 +27451,12 @@
           "resolved": "http://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz",
           "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==",
           "requires": {
-            "hoist-non-react-statics": "2.5.5",
-            "invariant": "2.2.4",
-            "lodash": "4.17.11",
-            "lodash-es": "4.17.11",
-            "loose-envify": "1.4.0",
-            "prop-types": "15.6.2"
+            "hoist-non-react-statics": "^2.5.0",
+            "invariant": "^2.0.0",
+            "lodash": "^4.17.5",
+            "lodash-es": "^4.17.5",
+            "loose-envify": "^1.1.0",
+            "prop-types": "^15.6.0"
           }
         }
       }
@@ -27007,8 +27467,8 @@
       "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
       "dev": true,
       "requires": {
-        "psl": "1.1.29",
-        "punycode": "1.4.1"
+        "psl": "^1.1.24",
+        "punycode": "^1.4.1"
       },
       "dependencies": {
         "punycode": {
@@ -27025,7 +27485,7 @@
       "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
       "dev": true,
       "requires": {
-        "punycode": "2.1.1"
+        "punycode": "^2.1.0"
       }
     },
     "trim": {
@@ -27063,7 +27523,7 @@
       "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
       "dev": true,
       "requires": {
-        "glob": "7.1.3"
+        "glob": "^7.1.2"
       },
       "dependencies": {
         "glob": {
@@ -27072,12 +27532,12 @@
           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
@@ -27085,7 +27545,8 @@
     "tslib": {
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
-      "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
+      "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+      "dev": true
     },
     "tty-browserify": {
       "version": "0.0.0",
@@ -27099,7 +27560,7 @@
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
       "dev": true,
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "^5.0.1"
       }
     },
     "tweetnacl": {
@@ -27114,7 +27575,7 @@
       "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
       "dev": true,
       "requires": {
-        "prelude-ls": "1.1.2"
+        "prelude-ls": "~1.1.2"
       }
     },
     "type-is": {
@@ -27123,61 +27584,34 @@
       "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
       "requires": {
         "media-typer": "0.3.0",
-        "mime-types": "2.1.21"
+        "mime-types": "~2.1.18"
       }
     },
     "typedarray": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
     },
     "typical": {
       "version": "2.6.1",
       "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
       "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0="
     },
-    "ua-parser-js": {
-      "version": "0.7.19",
-      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz",
-      "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ=="
-    },
-    "uglify-js": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
-      "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
-      "requires": {
-        "async": "0.2.10",
-        "source-map": "0.5.7",
-        "uglify-to-browserify": "1.0.2",
-        "yargs": "3.10.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        }
-      }
-    },
-    "uglify-to-browserify": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
-      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
-    },
     "uglifyjs-webpack-plugin": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz",
       "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==",
       "dev": true,
       "requires": {
-        "cacache": "10.0.4",
-        "find-cache-dir": "1.0.0",
-        "schema-utils": "0.4.7",
-        "serialize-javascript": "1.5.0",
-        "source-map": "0.6.1",
-        "uglify-es": "3.3.9",
-        "webpack-sources": "1.3.0",
-        "worker-farm": "1.6.0"
+        "cacache": "^10.0.4",
+        "find-cache-dir": "^1.0.0",
+        "schema-utils": "^0.4.5",
+        "serialize-javascript": "^1.4.0",
+        "source-map": "^0.6.1",
+        "uglify-es": "^3.3.4",
+        "webpack-sources": "^1.1.0",
+        "worker-farm": "^1.5.2"
       },
       "dependencies": {
         "commander": {
@@ -27198,20 +27632,12 @@
           "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
           "dev": true,
           "requires": {
-            "commander": "2.13.0",
-            "source-map": "0.6.1"
+            "commander": "~2.13.0",
+            "source-map": "~0.6.1"
           }
         }
       }
     },
-    "uncontrollable": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-4.1.0.tgz",
-      "integrity": "sha1-4DWCkSUuGGUiLZCTmxny9J+Bwak=",
-      "requires": {
-        "invariant": "2.2.4"
-      }
-    },
     "underscore": {
       "version": "1.8.3",
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
@@ -27241,8 +27667,8 @@
       "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==",
       "dev": true,
       "requires": {
-        "inherits": "2.0.3",
-        "xtend": "4.0.1"
+        "inherits": "^2.0.1",
+        "xtend": "^4.0.1"
       },
       "dependencies": {
         "xtend": {
@@ -27259,12 +27685,12 @@
       "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==",
       "dev": true,
       "requires": {
-        "bail": "1.0.3",
-        "extend": "3.0.2",
-        "is-plain-obj": "1.1.0",
-        "trough": "1.0.3",
-        "vfile": "2.3.0",
-        "x-is-string": "0.1.0"
+        "bail": "^1.0.0",
+        "extend": "^3.0.0",
+        "is-plain-obj": "^1.1.0",
+        "trough": "^1.0.0",
+        "vfile": "^2.0.0",
+        "x-is-string": "^0.1.0"
       }
     },
     "union-value": {
@@ -27273,10 +27699,10 @@
       "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
       "dev": true,
       "requires": {
-        "arr-union": "3.1.0",
-        "get-value": "2.0.6",
-        "is-extendable": "0.1.1",
-        "set-value": "0.4.3"
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^0.4.3"
       },
       "dependencies": {
         "extend-shallow": {
@@ -27285,7 +27711,7 @@
           "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
           "dev": true,
           "requires": {
-            "is-extendable": "0.1.1"
+            "is-extendable": "^0.1.0"
           }
         },
         "set-value": {
@@ -27294,10 +27720,10 @@
           "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-extendable": "0.1.1",
-            "is-plain-object": "2.0.4",
-            "to-object-path": "0.3.0"
+            "extend-shallow": "^2.0.1",
+            "is-extendable": "^0.1.1",
+            "is-plain-object": "^2.0.1",
+            "to-object-path": "^0.3.0"
           }
         }
       }
@@ -27320,7 +27746,7 @@
       "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
       "dev": true,
       "requires": {
-        "unique-slug": "2.0.1"
+        "unique-slug": "^2.0.0"
       }
     },
     "unique-slug": {
@@ -27329,7 +27755,7 @@
       "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==",
       "dev": true,
       "requires": {
-        "imurmurhash": "0.1.4"
+        "imurmurhash": "^0.1.4"
       }
     },
     "unist-util-find-all-after": {
@@ -27338,7 +27764,7 @@
       "integrity": "sha512-nDl79mKpffXojLpCimVXnxhlH/jjaTnDuScznU9J4jjsaUtBdDbxmlc109XtcqxY4SDO0SwzngsxxW8DIISt1w==",
       "dev": true,
       "requires": {
-        "unist-util-is": "2.1.2"
+        "unist-util-is": "^2.0.0"
       }
     },
     "unist-util-is": {
@@ -27353,7 +27779,7 @@
       "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==",
       "dev": true,
       "requires": {
-        "unist-util-visit": "1.4.0"
+        "unist-util-visit": "^1.1.0"
       }
     },
     "unist-util-stringify-position": {
@@ -27368,7 +27794,7 @@
       "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==",
       "dev": true,
       "requires": {
-        "unist-util-visit-parents": "2.0.1"
+        "unist-util-visit-parents": "^2.0.0"
       }
     },
     "unist-util-visit-parents": {
@@ -27377,7 +27803,7 @@
       "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==",
       "dev": true,
       "requires": {
-        "unist-util-is": "2.1.2"
+        "unist-util-is": "^2.1.2"
       }
     },
     "unpipe": {
@@ -27391,8 +27817,8 @@
       "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
       "dev": true,
       "requires": {
-        "has-value": "0.3.1",
-        "isobject": "3.0.1"
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
       },
       "dependencies": {
         "has-value": {
@@ -27401,9 +27827,9 @@
           "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
           "dev": true,
           "requires": {
-            "get-value": "2.0.6",
-            "has-values": "0.1.4",
-            "isobject": "2.1.0"
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
           },
           "dependencies": {
             "isobject": {
@@ -27437,25 +27863,13 @@
       "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
       "dev": true
     },
-    "upper-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
-      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
-    },
-    "upper-case-first": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz",
-      "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=",
-      "requires": {
-        "upper-case": "1.1.3"
-      }
-    },
     "uri-js": {
       "version": "4.2.2",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
       "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+      "dev": true,
       "requires": {
-        "punycode": "2.1.1"
+        "punycode": "^2.1.0"
       }
     },
     "urix": {
@@ -27487,8 +27901,8 @@
       "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz",
       "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==",
       "requires": {
-        "querystringify": "2.1.0",
-        "requires-port": "1.0.0"
+        "querystringify": "^2.0.0",
+        "requires-port": "^1.0.0"
       }
     },
     "use": {
@@ -27503,14 +27917,6 @@
       "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
       "dev": true
     },
-    "util": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
-      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
-      "requires": {
-        "inherits": "2.0.3"
-      }
-    },
     "util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -27522,8 +27928,8 @@
       "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.3",
-        "object.getownpropertydescriptors": "2.0.3"
+        "define-properties": "^1.1.2",
+        "object.getownpropertydescriptors": "^2.0.3"
       }
     },
     "utils-merge": {
@@ -27549,7 +27955,7 @@
       "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
       "dev": true,
       "requires": {
-        "user-home": "1.1.1"
+        "user-home": "^1.1.1"
       }
     },
     "validate-npm-package-license": {
@@ -27558,8 +27964,8 @@
       "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
       "dev": true,
       "requires": {
-        "spdx-correct": "3.0.2",
-        "spdx-expression-parse": "3.0.0"
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
       }
     },
     "value-equal": {
@@ -27584,9 +27990,9 @@
       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
       "dev": true,
       "requires": {
-        "assert-plus": "1.0.0",
+        "assert-plus": "^1.0.0",
         "core-util-is": "1.0.2",
-        "extsprintf": "1.3.0"
+        "extsprintf": "^1.2.0"
       }
     },
     "vfile": {
@@ -27595,10 +28001,10 @@
       "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==",
       "dev": true,
       "requires": {
-        "is-buffer": "1.1.6",
+        "is-buffer": "^1.1.4",
         "replace-ext": "1.0.0",
-        "unist-util-stringify-position": "1.1.2",
-        "vfile-message": "1.0.1"
+        "unist-util-stringify-position": "^1.0.0",
+        "vfile-message": "^1.0.0"
       }
     },
     "vfile-location": {
@@ -27613,7 +28019,7 @@
       "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==",
       "dev": true,
       "requires": {
-        "unist-util-stringify-position": "1.1.2"
+        "unist-util-stringify-position": "^1.1.1"
       }
     },
     "vm-browserify": {
@@ -27631,7 +28037,7 @@
       "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
       "dev": true,
       "requires": {
-        "browser-process-hrtime": "0.1.3"
+        "browser-process-hrtime": "^0.1.2"
       }
     },
     "walk-back": {
@@ -27646,15 +28052,7 @@
       "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
       "dev": true,
       "requires": {
-        "makeerror": "1.0.11"
-      }
-    },
-    "warning": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz",
-      "integrity": "sha1-ISINnGOvx3qMkhEeARr3Bc4MaQE=",
-      "requires": {
-        "loose-envify": "1.4.0"
+        "makeerror": "1.0.x"
       }
     },
     "watch": {
@@ -27663,13 +28061,13 @@
       "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
       "dev": true,
       "requires": {
-        "exec-sh": "0.2.2",
-        "minimist": "1.2.0"
+        "exec-sh": "^0.2.0",
+        "minimist": "^1.2.0"
       },
       "dependencies": {
         "minimist": {
           "version": "1.2.0",
-          "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
           "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
           "dev": true
         }
@@ -27681,9 +28079,9 @@
       "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
       "dev": true,
       "requires": {
-        "chokidar": "2.0.4",
-        "graceful-fs": "4.1.11",
-        "neo-async": "2.6.0"
+        "chokidar": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0"
       },
       "dependencies": {
         "anymatch": {
@@ -27692,8 +28090,8 @@
           "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
           "dev": true,
           "requires": {
-            "micromatch": "3.1.10",
-            "normalize-path": "2.1.1"
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
           }
         },
         "arr-diff": {
@@ -27714,16 +28112,16 @@
           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
           "dev": true,
           "requires": {
-            "arr-flatten": "1.1.0",
-            "array-unique": "0.3.2",
-            "extend-shallow": "2.0.1",
-            "fill-range": "4.0.0",
-            "isobject": "3.0.1",
-            "repeat-element": "1.1.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "extend-shallow": {
@@ -27732,7 +28130,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -27743,19 +28141,19 @@
           "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
           "dev": true,
           "requires": {
-            "anymatch": "2.0.0",
-            "async-each": "1.0.1",
-            "braces": "2.3.2",
-            "fsevents": "1.2.4",
-            "glob-parent": "3.1.0",
-            "inherits": "2.0.3",
-            "is-binary-path": "1.0.1",
-            "is-glob": "4.0.0",
-            "lodash.debounce": "4.0.8",
-            "normalize-path": "2.1.1",
-            "path-is-absolute": "1.0.1",
-            "readdirp": "2.2.1",
-            "upath": "1.1.0"
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.0",
+            "braces": "^2.3.0",
+            "fsevents": "^1.2.2",
+            "glob-parent": "^3.1.0",
+            "inherits": "^2.0.1",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^4.0.0",
+            "lodash.debounce": "^4.0.8",
+            "normalize-path": "^2.1.1",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.0.0",
+            "upath": "^1.0.5"
           }
         },
         "debug": {
@@ -27773,13 +28171,13 @@
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -27788,7 +28186,7 @@
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
@@ -27797,7 +28195,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
@@ -27806,7 +28204,7 @@
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -27815,7 +28213,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -27826,7 +28224,7 @@
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -27835,7 +28233,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -27846,9 +28244,9 @@
               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
@@ -27865,14 +28263,14 @@
           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
           "dev": true,
           "requires": {
-            "array-unique": "0.3.2",
-            "define-property": "1.0.0",
-            "expand-brackets": "2.1.4",
-            "extend-shallow": "2.0.1",
-            "fragment-cache": "0.2.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -27881,7 +28279,7 @@
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
@@ -27890,7 +28288,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -27901,10 +28299,10 @@
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
@@ -27913,7 +28311,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -27924,8 +28322,8 @@
           "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
           "dev": true,
           "requires": {
-            "is-glob": "3.1.0",
-            "path-dirname": "1.0.2"
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
           },
           "dependencies": {
             "is-glob": {
@@ -27934,7 +28332,7 @@
               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
               "dev": true,
               "requires": {
-                "is-extglob": "2.1.1"
+                "is-extglob": "^2.1.0"
               }
             }
           }
@@ -27945,7 +28343,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -27954,7 +28352,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -27963,9 +28361,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-extglob": {
@@ -27980,7 +28378,7 @@
           "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
           "dev": true,
           "requires": {
-            "is-extglob": "2.1.1"
+            "is-extglob": "^2.1.1"
           }
         },
         "is-number": {
@@ -27989,7 +28387,7 @@
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
@@ -27998,7 +28396,7 @@
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
@@ -28027,19 +28425,19 @@
           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "define-property": "2.0.2",
-            "extend-shallow": "3.0.2",
-            "extglob": "2.0.4",
-            "fragment-cache": "0.2.1",
-            "kind-of": "6.0.2",
-            "nanomatch": "1.2.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         },
         "ms": {
@@ -28066,26 +28464,26 @@
         "@webassemblyjs/helper-module-context": "1.7.10",
         "@webassemblyjs/wasm-edit": "1.7.10",
         "@webassemblyjs/wasm-parser": "1.7.10",
-        "acorn": "5.7.3",
-        "acorn-dynamic-import": "3.0.0",
-        "ajv": "6.5.4",
-        "ajv-keywords": "3.2.0",
-        "chrome-trace-event": "1.0.0",
-        "enhanced-resolve": "4.1.0",
-        "eslint-scope": "4.0.0",
-        "json-parse-better-errors": "1.0.2",
-        "loader-runner": "2.3.1",
-        "loader-utils": "1.1.0",
-        "memory-fs": "0.4.1",
-        "micromatch": "3.1.10",
-        "mkdirp": "0.5.1",
-        "neo-async": "2.6.0",
-        "node-libs-browser": "2.1.0",
-        "schema-utils": "0.4.7",
-        "tapable": "1.1.0",
-        "uglifyjs-webpack-plugin": "1.3.0",
-        "watchpack": "1.6.0",
-        "webpack-sources": "1.3.0"
+        "acorn": "^5.6.2",
+        "acorn-dynamic-import": "^3.0.0",
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0",
+        "chrome-trace-event": "^1.0.0",
+        "enhanced-resolve": "^4.1.0",
+        "eslint-scope": "^4.0.0",
+        "json-parse-better-errors": "^1.0.2",
+        "loader-runner": "^2.3.0",
+        "loader-utils": "^1.1.0",
+        "memory-fs": "~0.4.1",
+        "micromatch": "^3.1.8",
+        "mkdirp": "~0.5.0",
+        "neo-async": "^2.5.0",
+        "node-libs-browser": "^2.0.0",
+        "schema-utils": "^0.4.4",
+        "tapable": "^1.1.0",
+        "uglifyjs-webpack-plugin": "^1.2.4",
+        "watchpack": "^1.5.0",
+        "webpack-sources": "^1.3.0"
       },
       "dependencies": {
         "arr-diff": {
@@ -28106,16 +28504,16 @@
           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
           "dev": true,
           "requires": {
-            "arr-flatten": "1.1.0",
-            "array-unique": "0.3.2",
-            "extend-shallow": "2.0.1",
-            "fill-range": "4.0.0",
-            "isobject": "3.0.1",
-            "repeat-element": "1.1.3",
-            "snapdragon": "0.8.2",
-            "snapdragon-node": "2.1.1",
-            "split-string": "3.1.0",
-            "to-regex": "3.0.2"
+            "arr-flatten": "^1.1.0",
+            "array-unique": "^0.3.2",
+            "extend-shallow": "^2.0.1",
+            "fill-range": "^4.0.0",
+            "isobject": "^3.0.1",
+            "repeat-element": "^1.1.2",
+            "snapdragon": "^0.8.1",
+            "snapdragon-node": "^2.0.1",
+            "split-string": "^3.0.2",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "extend-shallow": {
@@ -28124,7 +28522,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -28144,8 +28542,8 @@
           "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
           "dev": true,
           "requires": {
-            "esrecurse": "4.2.1",
-            "estraverse": "4.2.0"
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
           }
         },
         "expand-brackets": {
@@ -28154,13 +28552,13 @@
           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
           "dev": true,
           "requires": {
-            "debug": "2.6.9",
-            "define-property": "0.2.5",
-            "extend-shallow": "2.0.1",
-            "posix-character-classes": "0.1.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "debug": "^2.3.3",
+            "define-property": "^0.2.5",
+            "extend-shallow": "^2.0.1",
+            "posix-character-classes": "^0.1.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -28169,7 +28567,7 @@
               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "0.1.6"
+                "is-descriptor": "^0.1.0"
               }
             },
             "extend-shallow": {
@@ -28178,7 +28576,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             },
             "is-accessor-descriptor": {
@@ -28187,7 +28585,7 @@
               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -28196,7 +28594,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -28207,7 +28605,7 @@
               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
               "dev": true,
               "requires": {
-                "kind-of": "3.2.2"
+                "kind-of": "^3.0.2"
               },
               "dependencies": {
                 "kind-of": {
@@ -28216,7 +28614,7 @@
                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                   "dev": true,
                   "requires": {
-                    "is-buffer": "1.1.6"
+                    "is-buffer": "^1.1.5"
                   }
                 }
               }
@@ -28227,9 +28625,9 @@
               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
               "dev": true,
               "requires": {
-                "is-accessor-descriptor": "0.1.6",
-                "is-data-descriptor": "0.1.4",
-                "kind-of": "5.1.0"
+                "is-accessor-descriptor": "^0.1.6",
+                "is-data-descriptor": "^0.1.4",
+                "kind-of": "^5.0.0"
               }
             },
             "kind-of": {
@@ -28246,14 +28644,14 @@
           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
           "dev": true,
           "requires": {
-            "array-unique": "0.3.2",
-            "define-property": "1.0.0",
-            "expand-brackets": "2.1.4",
-            "extend-shallow": "2.0.1",
-            "fragment-cache": "0.2.1",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "array-unique": "^0.3.2",
+            "define-property": "^1.0.0",
+            "expand-brackets": "^2.1.4",
+            "extend-shallow": "^2.0.1",
+            "fragment-cache": "^0.2.1",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.1"
           },
           "dependencies": {
             "define-property": {
@@ -28262,7 +28660,7 @@
               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
               "dev": true,
               "requires": {
-                "is-descriptor": "1.0.2"
+                "is-descriptor": "^1.0.0"
               }
             },
             "extend-shallow": {
@@ -28271,7 +28669,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -28282,10 +28680,10 @@
           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
           "dev": true,
           "requires": {
-            "extend-shallow": "2.0.1",
-            "is-number": "3.0.0",
-            "repeat-string": "1.6.1",
-            "to-regex-range": "2.1.1"
+            "extend-shallow": "^2.0.1",
+            "is-number": "^3.0.0",
+            "repeat-string": "^1.6.1",
+            "to-regex-range": "^2.1.0"
           },
           "dependencies": {
             "extend-shallow": {
@@ -28294,7 +28692,7 @@
               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
               "dev": true,
               "requires": {
-                "is-extendable": "0.1.1"
+                "is-extendable": "^0.1.0"
               }
             }
           }
@@ -28305,7 +28703,7 @@
           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-data-descriptor": {
@@ -28314,7 +28712,7 @@
           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
           "dev": true,
           "requires": {
-            "kind-of": "6.0.2"
+            "kind-of": "^6.0.0"
           }
         },
         "is-descriptor": {
@@ -28323,9 +28721,9 @@
           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
           "dev": true,
           "requires": {
-            "is-accessor-descriptor": "1.0.0",
-            "is-data-descriptor": "1.0.0",
-            "kind-of": "6.0.2"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         },
         "is-number": {
@@ -28334,7 +28732,7 @@
           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
           "dev": true,
           "requires": {
-            "kind-of": "3.2.2"
+            "kind-of": "^3.0.2"
           },
           "dependencies": {
             "kind-of": {
@@ -28343,7 +28741,7 @@
               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
               "dev": true,
               "requires": {
-                "is-buffer": "1.1.6"
+                "is-buffer": "^1.1.5"
               }
             }
           }
@@ -28366,19 +28764,19 @@
           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
           "dev": true,
           "requires": {
-            "arr-diff": "4.0.0",
-            "array-unique": "0.3.2",
-            "braces": "2.3.2",
-            "define-property": "2.0.2",
-            "extend-shallow": "3.0.2",
-            "extglob": "2.0.4",
-            "fragment-cache": "0.2.1",
-            "kind-of": "6.0.2",
-            "nanomatch": "1.2.13",
-            "object.pick": "1.3.0",
-            "regex-not": "1.0.2",
-            "snapdragon": "0.8.2",
-            "to-regex": "3.0.2"
+            "arr-diff": "^4.0.0",
+            "array-unique": "^0.3.2",
+            "braces": "^2.3.1",
+            "define-property": "^2.0.2",
+            "extend-shallow": "^3.0.2",
+            "extglob": "^2.0.4",
+            "fragment-cache": "^0.2.1",
+            "kind-of": "^6.0.2",
+            "nanomatch": "^1.2.9",
+            "object.pick": "^1.3.0",
+            "regex-not": "^1.0.0",
+            "snapdragon": "^0.8.1",
+            "to-regex": "^3.0.2"
           }
         },
         "ms": {
@@ -28395,16 +28793,16 @@
       "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==",
       "dev": true,
       "requires": {
-        "chalk": "2.4.1",
-        "cross-spawn": "6.0.5",
-        "enhanced-resolve": "4.1.0",
-        "global-modules-path": "2.3.0",
-        "import-local": "2.0.0",
-        "interpret": "1.1.0",
-        "loader-utils": "1.1.0",
-        "supports-color": "5.5.0",
-        "v8-compile-cache": "2.0.2",
-        "yargs": "12.0.2"
+        "chalk": "^2.4.1",
+        "cross-spawn": "^6.0.5",
+        "enhanced-resolve": "^4.1.0",
+        "global-modules-path": "^2.3.0",
+        "import-local": "^2.0.0",
+        "interpret": "^1.1.0",
+        "loader-utils": "^1.1.0",
+        "supports-color": "^5.5.0",
+        "v8-compile-cache": "^2.0.2",
+        "yargs": "^12.0.2"
       },
       "dependencies": {
         "ansi-regex": {
@@ -28425,9 +28823,9 @@
           "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
           "dev": true,
           "requires": {
-            "string-width": "2.1.1",
-            "strip-ansi": "4.0.0",
-            "wrap-ansi": "2.1.0"
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.0.0"
           }
         },
         "cross-spawn": {
@@ -28436,11 +28834,11 @@
           "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
           "dev": true,
           "requires": {
-            "nice-try": "1.0.5",
-            "path-key": "2.0.1",
-            "semver": "5.6.0",
-            "shebang-command": "1.2.0",
-            "which": "1.3.1"
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
           }
         },
         "decamelize": {
@@ -28458,13 +28856,13 @@
           "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
           "dev": true,
           "requires": {
-            "cross-spawn": "6.0.5",
-            "get-stream": "3.0.0",
-            "is-stream": "1.1.0",
-            "npm-run-path": "2.0.2",
-            "p-finally": "1.0.0",
-            "signal-exit": "3.0.2",
-            "strip-eof": "1.0.0"
+            "cross-spawn": "^6.0.0",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
           }
         },
         "find-up": {
@@ -28473,7 +28871,7 @@
           "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
           "dev": true,
           "requires": {
-            "locate-path": "3.0.0"
+            "locate-path": "^3.0.0"
           }
         },
         "import-local": {
@@ -28482,8 +28880,8 @@
           "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
           "dev": true,
           "requires": {
-            "pkg-dir": "3.0.0",
-            "resolve-cwd": "2.0.0"
+            "pkg-dir": "^3.0.0",
+            "resolve-cwd": "^2.0.0"
           }
         },
         "invert-kv": {
@@ -28498,7 +28896,7 @@
           "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
           "dev": true,
           "requires": {
-            "invert-kv": "2.0.0"
+            "invert-kv": "^2.0.0"
           }
         },
         "locate-path": {
@@ -28507,8 +28905,8 @@
           "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
           "dev": true,
           "requires": {
-            "p-locate": "3.0.0",
-            "path-exists": "3.0.0"
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
           }
         },
         "mem": {
@@ -28517,9 +28915,9 @@
           "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==",
           "dev": true,
           "requires": {
-            "map-age-cleaner": "0.1.2",
-            "mimic-fn": "1.2.0",
-            "p-is-promise": "1.1.0"
+            "map-age-cleaner": "^0.1.1",
+            "mimic-fn": "^1.0.0",
+            "p-is-promise": "^1.1.0"
           }
         },
         "os-locale": {
@@ -28528,9 +28926,9 @@
           "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==",
           "dev": true,
           "requires": {
-            "execa": "0.10.0",
-            "lcid": "2.0.0",
-            "mem": "4.0.0"
+            "execa": "^0.10.0",
+            "lcid": "^2.0.0",
+            "mem": "^4.0.0"
           }
         },
         "p-limit": {
@@ -28539,7 +28937,7 @@
           "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
           "dev": true,
           "requires": {
-            "p-try": "2.0.0"
+            "p-try": "^2.0.0"
           }
         },
         "p-locate": {
@@ -28548,7 +28946,7 @@
           "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
           "dev": true,
           "requires": {
-            "p-limit": "2.0.0"
+            "p-limit": "^2.0.0"
           }
         },
         "p-try": {
@@ -28563,7 +28961,7 @@
           "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
           "dev": true,
           "requires": {
-            "find-up": "3.0.0"
+            "find-up": "^3.0.0"
           }
         },
         "semver": {
@@ -28578,7 +28976,7 @@
           "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
           "dev": true,
           "requires": {
-            "ansi-regex": "3.0.0"
+            "ansi-regex": "^3.0.0"
           }
         },
         "yargs": {
@@ -28587,18 +28985,18 @@
           "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==",
           "dev": true,
           "requires": {
-            "cliui": "4.1.0",
-            "decamelize": "2.0.0",
-            "find-up": "3.0.0",
-            "get-caller-file": "1.0.3",
-            "os-locale": "3.0.1",
-            "require-directory": "2.1.1",
-            "require-main-filename": "1.0.1",
-            "set-blocking": "2.0.0",
-            "string-width": "2.1.1",
-            "which-module": "2.0.0",
-            "y18n": "3.2.1",
-            "yargs-parser": "10.1.0"
+            "cliui": "^4.0.0",
+            "decamelize": "^2.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^3.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1 || ^4.0.0",
+            "yargs-parser": "^10.1.0"
           }
         },
         "yargs-parser": {
@@ -28607,7 +29005,7 @@
           "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
           "dev": true,
           "requires": {
-            "camelcase": "4.1.0"
+            "camelcase": "^4.1.0"
           }
         }
       }
@@ -28618,10 +29016,10 @@
       "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==",
       "dev": true,
       "requires": {
-        "memory-fs": "0.4.1",
-        "mime": "2.3.1",
-        "range-parser": "1.2.0",
-        "webpack-log": "2.0.0"
+        "memory-fs": "~0.4.1",
+        "mime": "^2.3.1",
+        "range-parser": "^1.0.3",
+        "webpack-log": "^2.0.0"
       },
       "dependencies": {
         "mime": {
@@ -28639,9 +29037,9 @@
       "dev": true,
       "requires": {
         "ansi-html": "0.0.7",
-        "html-entities": "1.2.1",
-        "querystring": "0.2.0",
-        "strip-ansi": "3.0.1"
+        "html-entities": "^1.2.0",
+        "querystring": "^0.2.0",
+        "strip-ansi": "^3.0.0"
       }
     },
     "webpack-log": {
@@ -28650,8 +29048,8 @@
       "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
       "dev": true,
       "requires": {
-        "ansi-colors": "3.2.1",
-        "uuid": "3.3.2"
+        "ansi-colors": "^3.0.0",
+        "uuid": "^3.3.2"
       }
     },
     "webpack-merge": {
@@ -28660,7 +29058,7 @@
       "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==",
       "dev": true,
       "requires": {
-        "lodash": "4.17.11"
+        "lodash": "^4.17.5"
       }
     },
     "webpack-sources": {
@@ -28669,8 +29067,8 @@
       "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
       "dev": true,
       "requires": {
-        "source-list-map": "2.0.1",
-        "source-map": "0.6.1"
+        "source-list-map": "^2.0.0",
+        "source-map": "~0.6.1"
       },
       "dependencies": {
         "source-map": {
@@ -28683,7 +29081,7 @@
     },
     "webpack-stats-plugin": {
       "version": "0.2.1",
-      "resolved": "http://registry.npmjs.org/webpack-stats-plugin/-/webpack-stats-plugin-0.2.1.tgz",
+      "resolved": "https://registry.npmjs.org/webpack-stats-plugin/-/webpack-stats-plugin-0.2.1.tgz",
       "integrity": "sha512-OYMZLpZrK/qLA79NE4kC4DCt85h/5ipvWJcsefKe9MMw0qU4/ck/IJg+4OmWA+5EfrZZpHXDq92IptfYDWVfkw==",
       "dev": true
     },
@@ -28713,9 +29111,9 @@
       "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
       "dev": true,
       "requires": {
-        "lodash.sortby": "4.7.0",
-        "tr46": "1.0.1",
-        "webidl-conversions": "4.0.2"
+        "lodash.sortby": "^4.7.0",
+        "tr46": "^1.0.1",
+        "webidl-conversions": "^4.0.2"
       }
     },
     "whet.extend": {
@@ -28730,7 +29128,7 @@
       "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
       "dev": true,
       "requires": {
-        "isexe": "2.0.0"
+        "isexe": "^2.0.0"
       }
     },
     "which-module": {
@@ -28743,33 +29141,28 @@
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
       "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
-      "dev": true,
       "requires": {
-        "string-width": "2.1.1"
+        "string-width": "^1.0.2 || 2"
       }
     },
     "winchan": {
       "version": "0.1.4",
-      "resolved": "http://registry.npmjs.org/winchan/-/winchan-0.1.4.tgz",
+      "resolved": "https://registry.npmjs.org/winchan/-/winchan-0.1.4.tgz",
       "integrity": "sha1-iPoSQRzVQutiYBjDihlry7F5k7s="
     },
-    "window-size": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
-      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
-    },
     "wordwrap": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
-      "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+      "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+      "dev": true
     },
     "wordwrapjs": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
       "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
       "requires": {
-        "reduce-flatten": "1.0.1",
-        "typical": "2.6.1"
+        "reduce-flatten": "^1.0.1",
+        "typical": "^2.6.1"
       }
     },
     "worker-farm": {
@@ -28778,17 +29171,17 @@
       "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
       "dev": true,
       "requires": {
-        "errno": "0.1.7"
+        "errno": "~0.1.7"
       }
     },
     "wrap-ansi": {
       "version": "2.1.0",
-      "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
       "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
       "dev": true,
       "requires": {
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1"
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
       },
       "dependencies": {
         "is-fullwidth-code-point": {
@@ -28797,7 +29190,7 @@
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
           "dev": true,
           "requires": {
-            "number-is-nan": "1.0.1"
+            "number-is-nan": "^1.0.0"
           }
         },
         "string-width": {
@@ -28806,9 +29199,9 @@
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
           "dev": true,
           "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
           }
         }
       }
@@ -28816,7 +29209,8 @@
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
     },
     "write": {
       "version": "0.2.1",
@@ -28824,7 +29218,7 @@
       "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
       "dev": true,
       "requires": {
-        "mkdirp": "0.5.1"
+        "mkdirp": "^0.5.1"
       }
     },
     "write-file-atomic": {
@@ -28833,9 +29227,9 @@
       "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
       "dev": true,
       "requires": {
-        "graceful-fs": "4.1.11",
-        "imurmurhash": "0.1.4",
-        "signal-exit": "3.0.2"
+        "graceful-fs": "^4.1.11",
+        "imurmurhash": "^0.1.4",
+        "signal-exit": "^3.0.2"
       }
     },
     "ws": {
@@ -28844,7 +29238,7 @@
       "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
       "dev": true,
       "requires": {
-        "async-limiter": "1.0.0"
+        "async-limiter": "~1.0.0"
       }
     },
     "x-is-string": {
@@ -28858,31 +29252,12 @@
       "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz",
       "integrity": "sha512-rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg=="
     },
-    "xml-char-classes": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
-      "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0="
-    },
     "xml-name-validator": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
       "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
       "dev": true
     },
-    "xml2js": {
-      "version": "0.4.19",
-      "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
-      "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
-      "requires": {
-        "sax": "1.2.4",
-        "xmlbuilder": "9.0.7"
-      }
-    },
-    "xmlbuilder": {
-      "version": "9.0.7",
-      "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
-      "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
-    },
     "xmlcreate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
@@ -28900,7 +29275,7 @@
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
       "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
       "requires": {
-        "object-keys": "0.4.0"
+        "object-keys": "~0.4.0"
       }
     },
     "y18n": {
@@ -28915,24 +29290,13 @@
       "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
       "dev": true
     },
-    "yargs": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
-      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
-      "requires": {
-        "camelcase": "1.2.1",
-        "cliui": "2.1.0",
-        "decamelize": "1.2.0",
-        "window-size": "0.1.0"
-      }
-    },
     "yargs-parser": {
       "version": "9.0.2",
       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
       "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
       "dev": true,
       "requires": {
-        "camelcase": "4.1.0"
+        "camelcase": "^4.1.0"
       },
       "dependencies": {
         "camelcase": {
diff --git a/src/actions/challenge-listing.js b/src/actions/challenge-listing.js
index 52999f0f..8c1178d1 100644
--- a/src/actions/challenge-listing.js
+++ b/src/actions/challenge-listing.js
@@ -126,9 +126,10 @@ function getAllActiveChallengesDone(uuid, tokenV3) {
   let user;
   if (tokenV3) {
     user = decodeToken(tokenV3).handle;
+    const { userId } = decodeToken(tokenV3);
     // Handle any errors on this endpoint so that the non-user specific challenges
     // will still be loaded.
-    calls.push(getAll(params => service.getUserChallenges(user, filter, params)
+    calls.push(getAll(params => service.getUserChallenges(userId, user, filter, params)
       .catch(() => ({ challenges: [] }))));
   }
   return Promise.all(calls).then(([ch, uch]) => {
@@ -184,20 +185,20 @@ function getActiveChallengesDone(
   });
 
   const service = getService(tokenV3);
+  const paginationParams = {
+    limit: PAGE_SIZE,
+    offset: page * PAGE_SIZE,
+  };
   const calls = [
-    service.getChallenges(filter, {
-      limit: PAGE_SIZE,
-      offset: page * PAGE_SIZE,
-    }),
+    service.getChallenges(filter, paginationParams),
   ];
   let user;
   if (tokenV3) {
     user = decodeToken(tokenV3).handle;
+    const { userId } = decodeToken(tokenV3);
     // Handle any errors on this endpoint so that the non-user specific challenges
     // will still be loaded.
-    calls.push(getAll(
-      params => service.getUserChallenges(user, filter, params).catch(() => ({ challenges: [] })),
-    ));
+    calls.push(service.getUserChallenges(userId, user, filter, paginationParams));
   }
   return Promise.all(calls).then(([ch, uch]) => {
     // let fullCH = ch;
@@ -270,7 +271,8 @@ function getRestActiveChallengesDone(
   let user;
   if (tokenV3) {
     user = decodeToken(tokenV3).handle;
-    calls.push(getAll(params => service.getUserChallenges(user, filter, params)
+    const { userId } = decodeToken(tokenV3);
+    calls.push(getAll(params => service.getUserChallenges(userId, user, filter, params)
       .catch(() => ({ challenges: [] }))), 1);
   }
   return Promise.all(calls).then(([ch, uch]) => {
diff --git a/src/actions/challenge.js b/src/actions/challenge.js
index f5dfb09b..fb8fa2de 100644
--- a/src/actions/challenge.js
+++ b/src/actions/challenge.js
@@ -274,14 +274,15 @@ function getActiveChallengesCountInit() {}
 /**
  * @static
  * @desc Creates an action that gets count of user's active challenges from the backend.
+ * @param {String} userId Topcoder user ID.
  * @param {String} handle Topcoder user handle.
  * @param {String} tokenV3 Optional. Topcoder auth token v3. Without token only
  *  public challenges will be counted. With the token provided, the action will
  *  also count private challenges related to this user.
  * @return {Action}
  */
-function getActiveChallengesCountDone(handle, tokenV3) {
-  return getChallengesService(tokenV3).getActiveChallengesCount(handle);
+function getActiveChallengesCountDone(userId, handle, tokenV3) {
+  return getChallengesService(tokenV3).getActiveChallengesCount(userId, handle);
 }
 
 export default createActions({
diff --git a/src/actions/members.js b/src/actions/members.js
index 38b25a1c..a0524769 100644
--- a/src/actions/members.js
+++ b/src/actions/members.js
@@ -5,6 +5,7 @@
 
 import qs from 'qs';
 import { createActions } from 'redux-actions';
+import { decodeToken } from 'tc-accounts';
 import { getService } from '../services/members';
 import { getService as getUserService } from '../services/user';
 import { getService as getChallengesService } from '../services/challenges';
@@ -158,8 +159,9 @@ async function getActiveChallengesDone(handle, uuid, tokenV3) {
       return getAll(getter, 1 + page, prev ? prev.concat(chunk) : chunk);
     });
   }
+  const { userId } = decodeToken(tokenV3);
   const calls = [
-    getAll(params => service.getUserChallenges(handle, filter, params)),
+    getAll(params => service.getUserChallenges(userId, handle, filter, params)),
   ];
 
   const [challenges] = await Promise.all(calls);
@@ -258,7 +260,8 @@ async function getSubtrackChallengesDone(
   params.offset = pageNum * pageSize;
 
   const service = getChallengesService(tokenV3);
-  return service.getUserChallenges(handle, filter, params)
+  const { userId } = decodeToken(tokenV3);
+  return service.getUserChallenges(userId, handle, filter, params)
     .then(res => ({
       uuid,
       challenges: res.challenges,
diff --git a/src/services/__mocks__/challenges.js b/src/services/__mocks__/challenges.js
index f881884e..e94c5536 100644
--- a/src/services/__mocks__/challenges.js
+++ b/src/services/__mocks__/challenges.js
@@ -292,14 +292,15 @@ class ChallengesService {
 
   /**
    * Gets challenges of the specified user.
+   * @param {String} userId User ID whose challenges we want to fetch.
    * @param {String} username User whose challenges we want to fetch.
    * @param {Object} filters Optional.
    * @param {Number} params Optional.
    * @return {Promise} Resolves to the api response.
    */
-  getUserChallenges(username, filters, params) {
-    const endpoint = `/members/${username.toLowerCase()}/challenges/`;
-    return this.private.getChallenges(endpoint, filters, params)
+  getUserChallenges(userId, username, filters, params) {
+    const endpoint = '/challenges';
+    return this.private.getChallenges(endpoint, { ...filters, userIds: userId }, params)
       .then((res) => {
         res.challenges.forEach(item => normalizeChallenge(item, username));
         return res;
@@ -330,11 +331,12 @@ class ChallengesService {
 
   /**
    * Gets count of user's active challenges.
+   * @param {String} userId Topcoder user ID.
    * @param {String} handle Topcoder user handle.
    * @return {Action} Resolves to the api response.
    */
-  getActiveChallengesCount(handle) {
-    _.noop(this, handle);
+  getActiveChallengesCount(userId, handle) {
+    _.noop(this, userId, handle);
     return Promise.resolve(10);
   }
 }
diff --git a/src/services/challenges.js b/src/services/challenges.js
index 04244726..daeb3c30 100644
--- a/src/services/challenges.js
+++ b/src/services/challenges.js
@@ -369,8 +369,11 @@ class ChallengesService {
     const challengeFiltered = await this.private.getChallenges('/challenges/', { id: challengeId })
       .then(res => res.challenges[0]);
 
-    const username = this.private.tokenV3 && decodeToken(this.private.tokenV3).handle;
-    const challengeUser = username && await this.getUserChallenges(username, { id: challengeId })
+    const decodedToken = this.private.tokenV3 && decodeToken(this.private.tokenV3);
+    const username = decodedToken.handle;
+    const { userId } = decodedToken;
+    const challengeUser = username
+    && await this.getUserChallenges(userId, username, { id: challengeId })
       .then(res => res.challenges[0]).catch(() => null);
 
     const finalChallenge = normalizeChallengeDetails(
@@ -439,14 +442,15 @@ class ChallengesService {
 
   /**
    * Gets challenges of the specified user.
+   * @param {String} userId User ID whose challenges we want to fetch.
    * @param {String} username User whose challenges we want to fetch.
    * @param {Object} filters Optional.
    * @param {Number} params Optional.
    * @return {Promise} Resolves to the api response.
    */
-  getUserChallenges(username, filters, params) {
-    const endpoint = `/members/${username.toLowerCase()}/challenges/`;
-    return this.private.getChallenges(endpoint, filters, params)
+  getUserChallenges(userId, username, filters, params) {
+    const endpoint = '/challenges';
+    return this.private.getChallenges(endpoint, { ...filters, userIds: userId }, params)
       .then((res) => {
         res.challenges.forEach(item => normalizeChallenge(item, username));
         return res;
@@ -504,13 +508,14 @@ class ChallengesService {
 
   /**
    * Gets count of user's active challenges.
+   * @param {String} userId Topcoder user ID.
    * @param {String} handle Topcoder user handle.
    * @return {Action} Resolves to the api response.
    */
-  getActiveChallengesCount(handle) {
+  getActiveChallengesCount(userId, handle) {
     const filter = { status: 'ACTIVE' };
     const params = { limit: 1, offset: 0 };
-    return this.getUserChallenges(handle, filter, params).then(res => res.totalCount);
+    return this.getUserChallenges(userId, handle, filter, params).then(res => res.totalCount);
   }
 
   /**